Nodejsexpression本地和Facebook的集成authentication
我实际上使用NodeJS开发了一个restfull服务器并进行expression。 我已经实现了oauth2协议,以保证我的API。 我想添加Facebook身份validation,但我不设法将Facebook身份validation与我的本地身份validation集成。
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); }));
本地身份validation和Facebook身份validation正常工作。 但经过Facebookauthentication后,我无法将所需的信息提供给oauth.token,以便获取API的令牌。
在数据库中使用面书店的令牌值进行validation之后。
向oAuth服务器询问刷新令牌
在刷新令牌中可以存储范围信息
- 使用Express和Postman同时发布多个JSON对象
- 关系不存在 – JugglingDB与Postgres适配器中的错误
- 使用Express.js v4和Socket.io v1进行会话
- 使用dynamic密钥推送到MongoDB数组
- 第一个通过Heroku进行Node应用部署的麻烦
- 使用passport.jspipe理express.js中不同types用户的身份validation
- Node.js与CouchDB和Backbone.js一起工作,JSON如何被服务?
- 如果Passport身份validation失败,如何在redirect时保留表单数据?
- 如何处理传递给返回URL的HTTPcallback?