环回护照移动登录

Loopback passport mobile login

我正在开发一个 API 带环回和通行证。我看过这个例子,非常好:

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

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

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

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

谢谢

我打开了一个关于同一问题的类似主题,How integrate loopback third-party login for android。然后找到了解决办法。

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

如果你问的是获取访问令牌,已经有办法做到这一点,所以你可以使用这样的登录方法获取访问令牌

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

您唯一需要做的就是从您的 android 应用调用此托管方法。您可以使用环回 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);
    });
});

如果你问的是,让用户登录社交网络帐户然后获取访问令牌,我可以模拟一些来自google场景的事情。你也可以检查额外的 loopback github test

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);
   });
});

在 google 场景中,我在用户单击登录按钮时获取一次性代码。然后将一次性代码发布到我的服务器以与访问令牌和刷新令牌进行交换。同样在这里,我从 google.

获取用户个人资料信息

Profile 和 provider 非常重要,因为 UserIdentityModel.login() 方法使用 provider 和 profile.id(如果这些信息不存在)创建匿名用户

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

  1. 使用Loopback-Passport example
  2. 来自server.js,替换代码如下

    app.get('/auth/account', ensureLoggedIn('/login'), function (req, res, next) {
        res.json(req.accessToken);
    
        });
    
  3. 使用上一行中的 accessToken,您可以使用 LoopBack APIs.You 可以扩展代码以创建您自己的自定义 API。