首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nodejs表示集成认证、本地和facebook

Nodejs表示集成认证、本地和facebook
EN

Stack Overflow用户
提问于 2015-02-27 14:10:28
回答 1查看 287关注 0票数 1

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

server.js

代码语言:javascript
复制
    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

代码语言:javascript
复制
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

代码语言:javascript
复制
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获取令牌。

EN

回答 1

Stack Overflow用户

发布于 2015-02-27 14:24:32

使用face进行身份验证后,在db内存储令牌值。

向oAuth服务器请求刷新令牌

在刷新令牌中,可以存储范围信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28767053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档