rust Tauri重定向URI架构

mmvthczy  于 2022-12-04  发布在  其他
关注(0)|答案(1)|浏览(209)

我正在构建一个Tauri应用程序,并希望设置OAuth与Google的集成。为此,我需要一个用于OAuth回调的URI,但Tauri不清楚如何配置模式,可能是使用此方法还是使用WindowUrl
如何将URI添加到我的Tauri应用程序中,以便我可以像下面的示例一样使用它:myapp://callback
我认为它可能看起来像下面这样:

fn main() {
    tauri::Builder::default()
        .invoke_handler(tauri::generate_handler![greet])
        .register_uri_scheme_protocol("myapp", move |app, request| {
            # protocol logic here
        })
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}
j0pj023g

j0pj023g1#

Tauri目前不直接支持深度链接。我发现一个很好的替代方案是this rust project。安装后你可以做如下操作:

#[tauri::command]
async fn start_oauth_server(window: Window) -> Result<u16, String> {
println!("Starting server");

start(None, move |url| {
    // Because of the unprotected localhost port, you must verify the URL here.
    // Preferebly send back only the token, or nothing at all if you can handle everything else in Rust.

    // convert the string to a url
    let url = url::Url::parse(&url).unwrap();

    // get the code query parameter
    let code = url
        .query_pairs()
        .find(|(k, _)| k == "code")
        .unwrap_or_default()
        .1;

    // get the state query parameter
    let state = url
        .query_pairs()
        .find(|(k, _)| k == "state")
        .unwrap_or_default()
        .1;

    // create map of query parameters
    let mut query_params = HashMap::new();

    query_params.insert("code".to_string(), code.to_string());
    query_params.insert("state".to_string(), state.to_string());
    query_params.insert(String::from("redirect_uri"), url.to_string());

    if window.emit("redirect_uri", query_params).is_ok() {
        println!("Sent redirect_uri event");
    } else {
        println!("Failed to send redirect_uri event");
    }
})
.map_err(|err| err.to_string())
}

相关问题