我遵循以下文档和示例:https://loopback.io/doc/en/lb3/Third-party-login-using-Passport.html
目前,我可以使用Google帐户创建用户。 一切正常,我在数据库中有一个新的用户和他的 userIdentity 。
要登录标准用户,我们可以使用 POST / users / login endpint。提供正确的数据后,我们将获得一个令牌。
问题是: 如何登录Google提供的用户?而我该如何获得他的令牌?
PS。我想在前端应用程序中使用此令牌。我正在寻求帮助来了解此过程。
答案 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);
});
});
};