【问题标题】:Android Amplify Auth Signout Timing OutAndroid Amplify Auth 注销超时
【发布时间】:2021-09-03 10:47:37
【问题描述】:

我一直致力于在 Kotlin 中学习 Amplify Framework for Android。以前,在 SO 社区的帮助下,我能够通过 Cognito 托管 UI 设置身份验证。我可以登录和注销,并查询 DynamoDB 用户表,很酷。

我正在使用带有视图模型的第二个 Activity AuthActivity 来处理登录/注销。但是,我想迁移到 1 Activity n Fragments 系统。视图模型定义了 Amplify auth 调用(我知道不好),所以我创建了一个使用相同视图模型的LoginFragment。然后,我将HostedUIRedirectActivity 添加到AndroidManifest 以从Response Handler described in the docs 升级。不知道为什么我最初没有这样做,但这是我问题的根源。

问题

更新 AndroidManifest 后,使用 Cognito 托管 UI 的登录/注销流程会产生错误和其他奇怪的行为。 Amplify.Auth.signOut() 调用响应超时错误,我可以在 onError 回调中设置断点来证明这一点。 Amplify.Auth.signInWithWebUI() 似乎可以将我带到托管 UI,然后返回到 LoginFragment,但在 onSuccess 回调中没有遇到任何代码。此外,一旦用户登录并再次单击登录按钮,托管 UI 会闪烁一秒钟,但我希望它要求以同一用户或其他用户身份登录。

我做了什么

  • 将身份验证代码直接移动到LoginFragment 以便在此处发布,得到相同的行为。
  • 注意到在 AndroidManifest 的托管 UI 活动中有一行 <data android:scheme="myapp" />,因此我将该值更改为应用程序的实际名称。问题依然存在。
  • 在文档中注意到 Amplify 版本 1.17.7 及更低版本“在通过 Web UI 登录后存在已知的注销问题”。这听起来可能是我的问题,所以我做了一个npm i -g @aws-amplify/cli 来更新以防万一。我在 5.0 版。问题仍然存在。

我将在下面发布我的代码。如有必要,我可以澄清任何事情或发布更多信息。非常感谢任何帮助或建议。谢谢!

我的代码

class LoginFragment : Fragment() {
    private val viewmodel: AuthViewModel by viewModels()

    private lateinit var binding: FragmentLoginBinding

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?,
    ): View {
        // Inflate the layout for this fragment
        binding = FragmentLoginBinding.inflate(inflater)
        binding.authViewModel = viewmodel
        val view = binding.root
        binding.btnSignIn.setOnClickListener { btnLoginOnClick(view) }
        binding.btnSignout.setOnClickListener { btnLogoutOnClick(view) }
        return view
    }

    fun signInWithWebUI(a: Activity) {
        Amplify.Auth.signInWithWebUI(a,
            { Log.i(tag, "loginSuccess") },
            { Log.e(tag, "loginError", it) } )
    }

    fun btnLoginOnClick(view: View) { signInWithWebUI(activity as MainActivity) }

    fun signOut() {
        Amplify.Auth.signOut(
            { Log.i(tag, "logoutSuccess") },
            { Log.e(tag, "logoutError", it) } )
    }

    fun btnLogoutOnClick(view: View) { signOut() }
}

【问题讨论】:

    标签: android kotlin amazon-cognito aws-amplify


    【解决方案1】:

    好的,我想我解决了我的问题。

    AndroidManifest 有一个名为CustomTabsRedirectActivity 的活动,我不记得将其放置在那里。也许 Amplify 自动做到了这一点。无论如何,我删除了那个 Activity 块并再次测试。现在登录回调被命中,一闪就注销成功。

    AndroidManifest 的东西让我很头疼,所以如果我做错了,我很想听听解释或建议。否则,我将在允许时将其标记为已接受。

    希望这可能会帮助我这个职位的其他人。

    【讨论】:

      猜你喜欢
      • 2011-10-23
      • 2017-10-31
      • 2014-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-28
      • 1970-01-01
      相关资源
      最近更新 更多