AWS Amplify,如何检查用户是不是登录?

Posted

技术标签:

【中文标题】AWS Amplify,如何检查用户是不是登录?【英文标题】:AWS Amplify, how to check if user is logged in?AWS Amplify,如何检查用户是否登录? 【发布时间】:2018-07-21 19:51:48 【问题描述】:

我一直在使用带有 ionic 的 aws-amplify 库,想知道如何检查用户是否已登录?我来自火力背景,所以这是完全不同的。这样我就可以根据用户的登录状态授予对某些页面的访问权限。在我的auth 提供程序中,我导入Amplify Auth。我可以看到可以获得几条数据,但我不确定该使用什么。有currentUserPoolUsergetCurrentUser()getSyncedUser()currentAuthenticatedUsercurrentSessiongetCurrentUser()userSessioncurrentUserCredentialscurrentCredentialscurrentUserInfo。我似乎也找不到任何关于这方面的任何文件。在用户登录之前,我阅读和观看的所有内容都被掩盖了……这一切都应该在客户端上完成吗?谢谢。

【问题讨论】:

【参考方案1】:

我在每个页面中都使用 ionViewCanEnter() 函数来允许/拒绝访问。这个函数的返回值决定了页面是否可以被加载(并且它在运行costructor之前被执行)。在这个函数中你必须实现你的逻辑。

就我而言,使用 Amplify,我正在这样做:

async function ionViewCanEnter() 
    try 
        await Auth.currentAuthenticatedUser();
        return true;
     catch 
        return false;
    

由于放大 currentAuthenticatedUser() 返回一个承诺,我使用 async await 等待响应以了解用户是否登录。

【讨论】:

为什么要混合新旧语法? async ionViewCanEnter() try await Auth.currentAuthenticatedUser() return true catch(e) return false 呢?【参考方案2】:

这可以使用 Auth 的 fetchAuthSession() 方法来实现。

final CognitoAuthSession res = await Amplify.Auth.fetchAuthSession();
if (res.isSignedIn) 
  // do your thang

【讨论】:

【参考方案3】:

如果您将 Angular 与 ionic 一起使用,那么您可以在身份验证器服务中执行类似的操作

import AmplifyService from 'aws-amplify-angular';
.
.
  constructor(private amplifyService:AmplifyService)
  
    this.amplifyService.authStateChange$.subscribe(auth => 
      switch (auth.state) 
        case 'signedIn':
          this.signedIn=true;
        case 'signedOut':
          this.signedIn=false;
          break;
        default:
          this.signedIn=false;
      
    

然后您可以在路由器中使用this.signedIncanActiavate 保护。

角度路由器保护:https://angular.io/guide/router#preventing-unauthorized-access

【讨论】:

【参考方案4】:

嘿,我认为现在你只能使用Auth.currentUserInfo(); 来检测是否登录。如果您未登录,它将返回 undefined,如果您已登录,则返回 object

【讨论】:

或者这个Auth.currentAuthenticatedUser() 非常感谢。另外,在客户端做这一切可以吗?类似于如何构建完整的客户端应用程序并将 firebase 用作 BaaS?

以上是关于AWS Amplify,如何检查用户是不是登录?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 AWS Amplify for Flutter 中检查用户是不是已确认(电子邮件/电话验证)

如果我有登录用户的访问令牌,如何使用 AWS Amplify GraphQL API?

如何使用 aws amplify 保持用户登录 react-native

Swift - AWS Cognito 使用 Amplify - 如何在 swift 登录后获取令牌?

aws-amplify auth currentSession 不返回当前用户

AWS Amplify 登录错误 - 登录错误... [TypeError: (0, _getRandomBase.default) 不是函数