Loopback护照移动登录

dan*_*rvt 13 mobile facebook loopbackjs passport.js

我正在开发一个带有环回和护照的API.我见过这个例子,非常好:

https://github.com/strongloop/loopback-example-passport

在文档中,他们说环回遵循此步骤通过第三方提供商对用户进行身份验证:

  1. 访问者要求使用Facebook登录,方法是单击LoopBack支持的链接或按钮以启动oAuth 2.0授权.
  2. LoopBack将浏览器重定向到Facebook的授权终端,以便用户可以登录Facebook并向LoopBack授予权限
  3. Facebook使用oAuth 2.0授权代码将浏览器重定向到LoopBack托管的回调URL
  4. LoopBack向Facebook令牌端点发出请求,以使用授权码获取访问令牌
  5. LoopBack使用访问令牌来检索用户的Facebook个人资料
  6. LoopBack通过(provider,externalId)搜索UserIdentity模型以查看给定Facebook id的现有LoopBack用户如果是,则将LoopBack用户设置为当前上下文如果不是,则从配置文件创建LoopBack用户并创建相应的记录在UserIdentity中跟踪第三方登录.将新创建的用户设置为当前上下文.

所以我的问题是,假设一些用户使用移动应用程序获取访问令牌,我如何使用Loopback Passport验证该用户的请求?

谢谢

bla*_*ara 13

我打开了一个关于同一问题的类似主题,如何整合loopback第三方登录android.然后为此找到了解决方案.

首先,重要的是,环回用户可以同时拥有更多的访问权限.当您从网站或移动应用程序登录时,环回每次都会创建一个访问令牌.

如果您要求获取访问令牌,则已有一种方法可以执行此操作,因此您可以使用登录方法访问令牌

User.login({username: 'foo', password: 'bar'}, function(err, accessToken) {
   console.log(accessToken);
});
Run Code Online (Sandbox Code Playgroud)

你唯一要做的就是从你的Android应用程序调用这个托管方法.您可以使用loopback android sdk(正确方式)或将用户名和密码发布到服务器和处理,就像这样

app.post('/android/custom_login', function(req, res){
    var username = req.body.username;
    var password = req.body.password;

    User.login({username: username , password: password }, function(err, accessToken) {
      console.log(accessToken);
      return res.send(accessToken);
    });
});
Run Code Online (Sandbox Code Playgroud)

如果您询问,要使用社交网络帐户登录用户然后获取访问令牌,我可以模拟谷歌场景中的一些内容.您还可以检查额外的loopback github测试

app.post('/android/custom_login', function(req, res){
   var provider = 'google';
   var authSchema = 'oAuth 2.0';

   // oneTimeCode from android
   var oneTimeCode = req.body.oneTimeCode;

   // Make a request to google api
   // to exchange refreshToken and accessToken with using google apis
   var accessToken = 'FROM GOOGLE API';
   var refreshToken = 'FROM GOOGLE API';

   // external id is your google or facebook user id
   var externalId = 'FROM GOOGLE API';
   var email = 'FROM GOOGLE API';

   var credentials = {};
   credentials.externalId = externalId;
   credentials.refreshToken = refreshToken;

   var profile = {};
   profile.id = externalId;
   profile.emails = [{type:'account', value: email}];

   UserIdentityModel.login(
     provider, authSchema, profile, credentials , 
     {autoLogin:true}, function(err, loopbackUser, identity, token){
            if(err) throw err;
            // token is access token for thig login
            return res.send(token);
   });
});
Run Code Online (Sandbox Code Playgroud)

在谷歌场景中,当用户点击登录按钮时,我将获得一次性代码.然后将一次性代码发布到我的服务器,以便与访问令牌和刷新令牌进行交换.此外,我从谷歌获取用户个人资料信息.

配置文件和提供程序非常重要,因为UserIdentityModel.login()方法使用provider和profile.id创建匿名用户(如果这些信息不存在)

毕竟你将拥有Android应用程序的访问令牌,如你所见