LoopBack-如何登录由loopback-component-passport创建的用户

时间:2018-09-30 15:26:12

标签: passport.js loopbackjs google-authentication facebook-authentication

我遵循以下文档和示例:https://loopback.io/doc/en/lb3/Third-party-login-using-Passport.html

目前,我可以使用Google帐户创建用户。 一切正常,我在数据库中有一个新的用户和他的 userIdentity

用户表: enter image description here

userIdentity表: enter image description here

要登录标准用户,我们可以使用 POST / users / login endpint。提供正确的数据后,我们将获得一个令牌

问题是: 如何登录Google提供的用户?而我该如何获得他的令牌

PS。我想在前端应用程序中使用此令牌。我正在寻求帮助来了解此过程。

1 个答案:

答案 0 :(得分:0)

用于 LoopBack + mobileApp 中的社交登录

我添加了回送+ ionicApp的示例。

1. 您需要在您的APP中添加Facebook SDK。

2. 在应用程序中添加facebook登录

示例:

this.fb
  .login(["public_profile", "user_friends", "email"])
  .then(res => {
    var headers = new Headers();
    headers.append("Accept", 'application/json');
    headers.append('Content-Type', 'application/json' );
    const requestOptions = new RequestOptions({ headers: headers });


   var provider = 'facebook';
   var authSchema = 'oAuth 2.0';

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

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

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

   var profile = {};
   profile.id = externalId;
   profile.emails = [{type:'account', value: email}];
    let postData = {
      provider,
      authSchema,
      profile,
      credentials
    }

    this.http.post("http://you-api-url/socail-login", postData, requestOptions)
      .subscribe(data => {
        console.log(data); //here you get token set in localhost as current login done.
       }, error => {
        console.log(error);
      });
  })
  .catch(e => console.log("Error logging into Facebook", e));

此处在回送中创建登录请求以进行登录

module.exports = function(app, router) {
    const UserIdentityModel = app.models.UserIdentity;
    const EndUser = app.models.EndUser;
    /*Api for third party  */

    router.post('/social-login', function(req, res) {


        if (!req.body.provider || !req.body.authSchema || !req.body.profile || !req.body.credentials) {
            res.status(501).send({ error: 'Something went wrong' });
            return;
        }
        UserIdentityModel.login(
            req.body.provider, req.body.authSchema, req.body.profile, req.body.credentials, { autoLogin: true }, ipAddress,
            function(err, loopbackUser, identity, token) {
                if (err) {
                    res.status(501).send({ error: 'Something went wrong' });
                    return;
                }
                // token is access token for thig login
                res.json({ loopbackUser: loopbackUser, identity: identity, token: token });

                //return res.send(token);
            });

    });

};