我有一个iOS应用程序和nodeJS后端。目前,我已经实施了passport-facebook策略。从该应用程序中,我获得了facebook令牌,然后将其发送到授权用户的后端。
// config
var FacebookTokenStrategy = require('passport-facebook-token');
const passport = require('passport')
const { facebook_client_id, facebook_client_secret } = require('../config')
passport.use(new FacebookTokenStrategy({
clientID: facebook_client_id,
clientSecret: facebook_client_secret,
}, function (accessToken, refreshToken, profile, done) {
done(null, profile)
}
));
和中间件
const passport = require('passport')
require('../config/passport-facebook')
require('../config/passport-apple')
require('../config/passport')
const { INVALID_TOKEN, UNAUTHORIZED } = require('../config/constants')
module.exports = (req, res, next) => {
passport.authenticate(['apple','facebook-token', 'jwt'], function (err, user, info) {
if (err) {
if (err.oauthError) {
res
.status(400)
.json({ message: INVALID_TOKEN })
}
} else if (!user) {
res
.status(401)
.json({ message: UNAUTHORIZED })
} else {
req.user = user
next()
}
})(req, res, next);
}
现在我需要实现Apple登录。我尝试使用此库passport-apple 但是我不能使它工作。我从应用程序接收令牌,并将其发送到背面,但是我只得到
GET - /api/v1/shirts/?sorted%5BcreatedAt%5D=-1&filtered%5Bstate%5D=&pageNum=1&pageSize=10 - 302 - Found - 0b sent - 15 ms
我不知道这是否是正确的方法。我应该从应用程序中获取用户信息,将其发送到后端,然后将JWT令牌分配给创建的用户吗?或者我该如何做与Facebook一样?
答案 0 :(得分:0)
尝试几次后,借助此文档https://developer.apple.com/documentation/sign_in_with_apple/generate_and_validate_tokens
,我找到了解决方案您需要将其发送到您的身体POST:
{
"grant_type": "authorization_code",
"code": "YOUR_CODE",
}
代码:
“发送到您的应用程序的授权响应中收到的授权代码。该代码仅供一次性使用,有效期为5分钟。此参数对于授权代码验证请求是必需的。”苹果文档