mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
feat: implement magic link sign in (#5036)
This commit is contained in:
@ -77,6 +77,15 @@ impl TryInto<SignUpParams> for SignUpPayloadPB {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(ProtoBuf, Default)]
|
||||
pub struct MagicLinkSignInPB {
|
||||
#[pb(index = 1)]
|
||||
pub email: String,
|
||||
|
||||
#[pb(index = 2)]
|
||||
pub redirect_to: String,
|
||||
}
|
||||
|
||||
#[derive(ProtoBuf, Default)]
|
||||
pub struct OauthSignInPB {
|
||||
/// Use this field to store the third party auth information.
|
||||
|
@ -288,6 +288,19 @@ pub async fn get_user_setting(
|
||||
data_result_ok(user_setting)
|
||||
}
|
||||
|
||||
#[tracing::instrument(level = "debug", skip(data, manager), err)]
|
||||
pub async fn sign_in_with_magic_link_handler(
|
||||
data: AFPluginData<MagicLinkSignInPB>,
|
||||
manager: AFPluginState<Weak<UserManager>>,
|
||||
) -> Result<(), FlowyError> {
|
||||
let manager = upgrade_manager(manager)?;
|
||||
let params = data.into_inner();
|
||||
manager
|
||||
.sign_in_with_magic_link(¶ms.email, ¶ms.redirect_to)
|
||||
.await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tracing::instrument(level = "debug", skip(data, manager), err)]
|
||||
pub async fn oauth_sign_in_handler(
|
||||
data: AFPluginData<OauthSignInPB>,
|
||||
|
@ -23,6 +23,7 @@ pub fn init(user_manager: Weak<UserManager>) -> AFPlugin {
|
||||
.state(user_manager)
|
||||
.state(store_preferences)
|
||||
.event(UserEvent::SignInWithEmailPassword, sign_in_with_email_password_handler)
|
||||
.event(UserEvent::MagicLinkSignIn, sign_in_with_magic_link_handler)
|
||||
.event(UserEvent::SignUp, sign_up)
|
||||
.event(UserEvent::InitUser, init_user_handler)
|
||||
.event(UserEvent::GetUserProfile, get_user_profile_handler)
|
||||
@ -226,6 +227,9 @@ pub enum UserEvent {
|
||||
|
||||
#[event(input = "AcceptWorkspaceInvitationPB")]
|
||||
AcceptWorkspaceInvitation = 49,
|
||||
|
||||
#[event(input = "MagicLinkSignInPB", output = "UserProfilePB")]
|
||||
MagicLinkSignIn = 50,
|
||||
}
|
||||
|
||||
pub trait UserStatusCallback: Send + Sync + 'static {
|
||||
|
@ -672,6 +672,18 @@ impl UserManager {
|
||||
Ok(url)
|
||||
}
|
||||
|
||||
pub(crate) async fn sign_in_with_magic_link(
|
||||
&self,
|
||||
email: &str,
|
||||
redirect_to: &str,
|
||||
) -> Result<(), FlowyError> {
|
||||
let auth_service = self.cloud_services.get_user_service()?;
|
||||
auth_service
|
||||
.sign_in_with_magic_link(email, redirect_to)
|
||||
.await
|
||||
.map_err(|err| FlowyError::server_error().with_context(err))
|
||||
}
|
||||
|
||||
pub(crate) async fn generate_oauth_url(
|
||||
&self,
|
||||
oauth_provider: &str,
|
||||
|
Reference in New Issue
Block a user