rust 如何使用重定向登录(使用POST)

lawou6xi  于 2023-03-23  发布在  其他
关注(0)|答案(1)|浏览(187)

我还在尝试学习Rust和YEW Framework(0.20)。遵循YEW教程只会教你获取数据,许多在线示例对我的情况不起作用。在YEW中有简单的方法吗?
我想做的是:
1.简单地登录到后端(使用POST)。
1.获取/设置前端cookie的值。
注意:由于登录页面通常带有重定向,我必须在重定向之前获取值。
RUST + Reqwest中的工作示例。我可以通过禁用重定向来实现这一点。

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = reqwest::Client::builder()
    .cookie_store(true)
    .redirect(reqwest::redirect::Policy::none())
    .build()?;

    let res = client
        .post("http://127.0.0.1:8888/login")
        .body("this is the body")
        .send()
        .await?;
    println!("Status: {}", res.status());
    // cookie can be found here.....
    for x in res.cookies()
    {
        println!("{:?}",x)
    }

    // cookie used here .....
    let res = client
        .get("http://127.0.0.1:8888/")
        .body("this is the body")
        .send()
        .await?;
    println!("Status: {}", res.status());
    println!("text: {}", res.text().await?);
    Ok(())
}
6l7fqoea

6l7fqoea1#

我找到了一些代码,它可以在:https://github.com/wpcodevo/rust-yew-signup-signin/blob/master/src/api/user_api.rs

pub async fn api_login_user(credentials: &str) -> Result<UserLoginResponse, String> {
let response = match http::Request::post("http://localhost:8000/api/auth/login")
    .header("Content-Type", "application/json")
    .credentials(http::RequestCredentials::Include)
    .body(credentials)
    .send()
    .await
{
    Ok(res) => res,
    Err(_) => return Err("Failed to make request".to_string()),
};

if response.status() != 200 {
    let error_response = response.json::<ErrorResponse>().await;
    if let Ok(error_response) = error_response {
        return Err(error_response.message);
    } else {
        return Err(format!("API error: {}", response.status()));
    }
}

let res_json = response.json::<UserLoginResponse>().await;
match res_json {
    Ok(data) => Ok(data),
    Err(_) => Err("Failed to parse response".to_string()),
}}

但是对于我的解决方案,我只是使用了部分代码。并将导入改为gloo_net而不是reqwasm::http

let response = Request::post("http://127.0.0.1:8888/login")
    .header("Content-Type", "application/text")
    .credentials(http::RequestCredentials::Include)
    .body(credentials)
    .send()
    .await
    .unwrap();

相关问题