下午好,
我在节点应用程序中工作。具体而言,我正在使用" passport-linkedin-oauth2"。
有我的代码。
LinkedIn / index.js
list.sort((a, b) -> {
if (a.getData().equals(b.getData())) {
return a.getSeverity().compareTo(b.getSeverity);
} else {
return a.getData().compareTo(b.getData());
}
});
LinkedIn / passport.js
'use strict';
var express = require('express');
var passport = require('passport');
var auth = require('../auth.service');
var router = express.Router();
router
.get('/', passport.authenticate('linkedin', {
state: 'comienzo'
}),
function(req, res){
// The request will be redirected to Linkedin for authentication, so this
// function will not be called.
})
.get('/callback', passport.authenticate('linkedin', {
failureFlash : true,
failureRedirect: '/login'
}), auth.setTokenCookie);
module.exports = router;
我面临的问题是,我非常确定LinkedIn正在正确登录。
在我的应用程序中,当我按下登录按钮时,它会将我重定向到LinkedIn网页,我填写信息,然后我的服务器收到此答案
var passport = require('passport');
var LinkedInStrategy = require('passport-linkedin-oauth2').Strategy;
var models = require('../../api');
exports.setup = function (User, config) {
passport.use(new LinkedInStrategy({
clientID: config.linkedin.clientID,
clientSecret: config.linkedin.clientSecret,
callbackURL: config.linkedin.callbackURL,
scope: [ 'r_basicprofile', 'r_emailaddress'],
state: true
},
function(accessToken, refreshToken, profile, done) {
process.nextTick(function () {
// To keep the example simple, the user's LinkedIn profile is returned to
// represent the logged-in user. In a typical application, you would want
// to associate the LinkedIn account with a user record in your database,
// and return that user instead.
return done(null, profile);
});
models.User.findOrCreate({
where: {
linkedin: profile.id
},
defaults: {
name: profile.displayName,
linkedin: profile.id,
mail: profile.emails[0].value,
password: 'xxxxxxx',
role: 'admin', provider: 'linkedin',
activo: true
}
}).spread(function (user, created) {
console.log("x: " +user.values);
return done(null, user)
}).catch(function (err) {
console.log('Error occured', err);
return done(err);
});
}
));
};
我认为这意味着它没关系,因为我得到了之前发送给LinkedIn API的状态和代码。
无论如何,每次登录时都会将我重定向到登录页面,这是failureRedirect:' / login' (我已经测试过,如果我改变这条路线,应用程序会重定向我这个属性点的位置)
此外,我已经检查过它永远不会执行在db中为linkedin用户搜索的代码。
答案 0 :(得分:2)
删除处理程序或策略实例化的state属性,我不知道为什么,但这解决了这个问题。
exports.setup = function (User, config) {
passport.use(new LinkedInStrategy({
clientID: config.linkedin.clientID,
clientSecret: config.linkedin.clientSecret,
callbackURL: config.linkedin.callbackURL,
scope: [ 'r_basicprofile', 'r_emailaddress'],
state: true // <-- Remove state from here
})
}
和此代码
router
.get('/', passport.authenticate('linkedin', {
state: 'comienzo' // <-- Or Remove state from here
}),
你可以在其中一个地方设置状态,但不能同时设置两个,所以删除其中一个