颤振 - supabase 密码恢复

Posted

技术标签:

【中文标题】颤振 - supabase 密码恢复【英文标题】:flutter - supabase password recover 【发布时间】:2022-01-14 14:38:36 【问题描述】:

我正在尝试为客户实施 supabase 密码恢复。可悲的是我到目前为止还做不到。

我遵循了page网站上提供的指南

然后我看一下repo 提供的指南

但我无法让它工作。

这是我的 supabase 身份验证设置

这是我的 supabase 和 supabaseAuth 初始化

void main() async 
 
 WidgetsFlutterBinding.ensureInitialized();
 
 await Supabase.initialize(
   url: 'SITEURL',
   anonKey:
       'ANONKEY',
       authCallbackUrlHostname: 'ADDITIONAL AUTH CALLBACK REDIRECT'
 );
 //initializing supabaseAuth we use it for password recovery
 await SupabaseAuth.initialize(
   authCallbackUrlHostname: 'ADDITIONAL AUTH CALLBACK REDIRECT ',

 );
 //runnig the app
 runApp(const MyApp());

请注意,附加身份验证回调重定向是指完整的 (SITEURL + ://reset-callback)

这是我的 androidManifest.xml 意图

<intent-filter>
              <action android:name="android.intent.action.VIEW" />
              <category android:name="android.intent.category.DEFAULT" />
              <category android:name="android.intent.category.BROWSABLE" />
              <!-- Accepts URIs that begin with YOUR_SCHEME://YOUR_HOST -->
              <data
                android:scheme="SITEURL"
                android:host="//reset-callback" />
            </intent-filter>

在应用程序中,我首先导航到一个名为 AuthPage 的页面,其中有一个按钮将用户带到 ResetPage,用户在其中输入他的电子邮件并调用 resetpassword 方法

Future<void> resetPassword(String email) async 
    try 
      final response =
          await Supabase.instance.client.auth.api.resetPasswordForEmail(
        'email',
        options: supabase.AuthOptions(
          redirectTo: 'Additional Auth Callback Redirect'
        )
      );
      
      debugPrint('reset response $response');
     catch (error) 
      message = error.toString();
      debugPrint(message);
    
  

在 Auth Page 中将用户带回 AuthPage 我有 StreamBuilder,它侦听 SupabaseAuth.onAuthStateChange,如果 chage 是 passwordRecover,它会显示一个 TextField 和一个按钮,供用户重置密码,如下所示

StreamBuilder(
          stream: SupabaseAuth.instance.onAuthChange,
          builder: (context, AsyncSnapshot<AuthChangeEvent> snapshot) 
            print('snap shot auth state changed to $snapshot.data.toString()');
            if (snapshot.data == AuthChangeEvent.passwordRecovery) 
              return Column(
                children: [
                  const Text('Set New Password'),
                  TextField(
                    controller: controller,
                    decoration: const InputDecoration(
                      filled: true,
                    ),
                  ),
                  ElevatedButton(
                    onPressed: () 
                      if (controller.text.isEmpty ||
                          controller.text.length < 8) 
                        return;
                      
                      Supabase.instance.client.auth
                          .update(
                              UserAttributes(password: controller.text.trim()))
                          .catchError((error) 
                            ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('ERROR : $error')));
                          )
                          .then((value) => Navigator.of(context)
                              .pushReplacement(MaterialPageRoute(
                                  builder: (ctx) => const AuthScreen())));
                    ,
                    child: const Text('Submit'),
                  ),
                ],
              );
             else 
              SomeOtherWidget(),
            
          )

当我输入我的电子邮件并且将恢复链接通过电子邮件发送给我时出现了所有问题像下面

我确信该用户存在,如 supabase 的用户部分所示

我不知道我做错了什么,我不知道如何继续应用程序识别 url 中的 type=recovery 参数。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

我通过更改主机名解决了这个问题,结果发现我在清单中设置错了,还有一件事是 supabase 只允许使用 io.supabase.whatever 进行深度链接 作为主持人

【讨论】:

以上是关于颤振 - supabase 密码恢复的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB忘记密码怎么恢复

路由器密码错误,恢复出厂设置还是密码错误怎么办?

如何将我的数据从 supabase 流式传输到颤振应用程序

pt923恢复出厂设置密码

好的密码恢复方法

恢复 Maven 加密密码?