gpt4 book ai didi

node.js - Node Js Express 集成身份验证本地和 facebook

转载 作者:太空宇宙 更新时间:2023-11-04 00:57:58 24 4
gpt4 key购买 nike

我实际上使用NodeJS和express开发了一个restfull服务器。我已经实现了 oauth2 协议(protocol)来保护我的 API。我想添加 Facebook 身份验证,但我无法将 facebook 身份验证与我的本地身份验证集成。

server.js

    router.route('/oauth/local')
.post(oauth2Controller.token);

router.route('/oauth/facebook')
.get(passport.authenticate('facebook-token'), oauth2Controller.token);
//impossible to call oauth2Controller.token

oauth2.js

var oauth2orize = require('oauth2orize')
var User = require('../models/user');
var AccessToken = require('../models/accesstoken');
var RefreshToken = require('../models/refreshtoken');
var passport = require('passport');

var server = oauth2orize.createServer();

server.exchange(oauth2orize.exchange.password(function(application, username, password, scope, callback){
User.findOne({username: username}, function(err, user){
if (err)
return (callback(err));
if (!user)
return (callback(null, false));
user.verifyPassword(password, function(err, isMatch){
if (err)
return (callback(err));
if (!isMatch)
return (callback(null, false));

var accessToken = new AccessToken({
user: user.username,
application: application.oauth_id,
scope: '*'
});
accessToken.save(function(err){
if (err)
return (callback(err));
});

var refreshToken = new RefreshToken({
user: user.username,
application: application.oauth_id
});
refreshToken.save(function(err){
if (err)
return (callback(err));
});
callback(null, accessToken.value, refreshToken.value);
});
})
}));

server.exchange(oauth2orize.exchange.refreshToken(function(application, refreshToken, scope, callback){
RefreshToken.findOne({value: refreshToken}, function(err, token){
if (err)
return (callback(err));
if (!token)
return (callback(null, false));

var accessToken = new AccessToken({
user: token.user,
application: application.oauth_id,
scope: '*'
});

accessToken.save(function(err){
if (err)
return (callback(err));
});
callback(null, accessToken.value, refreshToken.value);
});
}));

exports.token = [
passport.authenticate(['clientBasic'], {session: false}),
server.token(),
server.errorHandler()
];

auth.js

passport.use(new FacebookTokenStrategy({
clientID: ID_CLIENT_FACEBOOK,
clientSecret: SECRET_CLIENT_FACEBOOK
},
function(accessToken, refreshToken, profile, done) {

//Do something here
done(null, profile);
}));

本地认证和facebook认证工作正常。但是在通过 facebook 进行身份验证后,我无法向 oauth.token 提供所需的信息来获取 API 的 token 。

最佳答案

使用 Facebook 进行身份验证后,将 token 值存储在数据库中。

向 oAuth 服务器请求刷新 token

在刷新 token 中,您可以存储范围信息

关于node.js - Node Js Express 集成身份验证本地和 facebook,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28767053/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com