2015-02-27 4 views
1

Я действительно разрабатываю restfull-сервер, используя NodeJS и express. Я уже реализовал протокол oauth2, чтобы защитить свой API. Я хочу добавить аутентификацию Facebook, но мне не удается интегрировать аутентификацию facebook с моей локальной аутентификацией.Nodejs экспресс-интеграция аутентификация локальная и фейсбук

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); 
})); 

Локальная аутентификация и е Аутентификация acebook работает нормально. Но после аутентификации с помощью facebook я не могу предоставить необходимую информацию для oauth.token, чтобы получить токены для моего API.

ответ

1

после аутентификации с символикой знака магазина книги в db.

запрашивает сервер OAuth для обновления маркеров

в обновлении фишки можно хранить информацию области действия

Смежные вопросы