From 8626b54de80c8f2613683b3ec7ff482b2946263e Mon Sep 17 00:00:00 2001 From: Zack Fu Zi Xiang Date: Fri, 9 Feb 2024 02:13:11 +0800 Subject: [PATCH] fix: redirect users after signup via magiclink --- admin_frontend/src/web_api.rs | 24 +++++++++++++++--------- libs/client-api/src/http.rs | 4 ++-- libs/gotrue/src/api.rs | 24 +++++++++++------------- src/application.rs | 2 +- 4 files changed, 29 insertions(+), 25 deletions(-) diff --git a/admin_frontend/src/web_api.rs b/admin_frontend/src/web_api.rs index fad51267..1f8f983e 100644 --- a/admin_frontend/src/web_api.rs +++ b/admin_frontend/src/web_api.rs @@ -117,10 +117,13 @@ pub async fn invite_handler( ) -> Result, WebApiError<'static>> { state .gotrue_client - .magic_link(&MagicLinkParams { - email: param.email, - ..Default::default() - }) + .magic_link( + &MagicLinkParams { + email: param.email, + ..Default::default() + }, + Some("/".to_owned()), + ) .await?; Ok(WebApiResponse::<()>::from_str("Invitation sent".into())) } @@ -308,7 +311,7 @@ pub async fn sign_up_handler( let sign_up_res = state .gotrue_client - .sign_up_with_referrer(¶m.email, ¶m.password, Some("/")) + .sign_up(¶m.email, ¶m.password, Some("/")) .await?; match sign_up_res { @@ -378,10 +381,13 @@ async fn send_magic_link( ) -> Result, WebApiError<'static>> { state .gotrue_client - .magic_link(&MagicLinkParams { - email: email.to_owned(), - ..Default::default() - }) + .magic_link( + &MagicLinkParams { + email: email.to_owned(), + ..Default::default() + }, + Some("/".to_owned()), + ) .await?; Ok(WebApiResponse::<()>::from_str("Magic Link Sent".into())) } diff --git a/libs/client-api/src/http.rs b/libs/client-api/src/http.rs index 4240ebdd..c83ee7fb 100644 --- a/libs/client-api/src/http.rs +++ b/libs/client-api/src/http.rs @@ -376,7 +376,7 @@ impl Client { .magic_link(&MagicLinkParams { email: email.to_owned(), ..Default::default() - }) + }, None) .await?; Ok(()) } @@ -676,7 +676,7 @@ impl Client { #[instrument(level = "debug", skip_all, err)] pub async fn sign_up(&self, email: &str, password: &str) -> Result<(), AppResponseError> { - match self.gotrue_client.sign_up(email, password).await? { + match self.gotrue_client.sign_up(email, password, None).await? { Authenticated(access_token_resp) => { self.token.write().set(access_token_resp); Ok(()) diff --git a/libs/gotrue/src/api.rs b/libs/gotrue/src/api.rs index f1ff73ca..292d2301 100644 --- a/libs/gotrue/src/api.rs +++ b/libs/gotrue/src/api.rs @@ -55,12 +55,7 @@ impl Client { } #[tracing::instrument(skip_all, err)] - pub async fn sign_up(&self, email: &str, password: &str) -> Result { - self.sign_up_with_referrer(email, password, None).await - } - - #[tracing::instrument(skip_all, err)] - pub async fn sign_up_with_referrer( + pub async fn sign_up( &self, email: &str, password: &str, @@ -224,14 +219,17 @@ impl Client { to_gotrue_result(resp).await } - pub async fn magic_link(&self, magic_link_params: &MagicLinkParams) -> Result<(), GoTrueError> { + pub async fn magic_link( + &self, + magic_link_params: &MagicLinkParams, + redirect_to: Option, + ) -> Result<(), GoTrueError> { let url = format!("{}/magiclink", self.base_url); - let resp = self - .client - .request(Method::POST, &url) - .json(&magic_link_params) - .send() - .await?; + let mut req_builder = self.client.request(Method::POST, &url); + if let Some(redirect_to) = redirect_to { + req_builder = req_builder.header("redirect_to", redirect_to); + } + let resp = req_builder.json(&magic_link_params).send().await?; check_gotrue_result(resp).await } diff --git a/src/application.rs b/src/application.rs index c03c4511..e0cf6377 100644 --- a/src/application.rs +++ b/src/application.rs @@ -229,7 +229,7 @@ async fn setup_admin_account( ) -> Result<(), Error> { let admin_email = gotrue_setting.admin_email.as_str(); let password = gotrue_setting.admin_password.as_str(); - let res_resp = gotrue_client.sign_up(admin_email, password).await; + let res_resp = gotrue_client.sign_up(admin_email, password, None).await; match res_resp { Err(err) => { if let app_error::gotrue::GoTrueError::Internal(err) = err {