护照会话不存在
Posted
技术标签:
【中文标题】护照会话不存在【英文标题】:Passport session is not presisting 【发布时间】:2017-09-30 22:17:34 【问题描述】:您好,我正在尝试使用本地护照策略实现登录。出于某种奇怪的原因,当我从邮递员发送请求时,我的代码可以工作,但是当我从我的角度项目中调用相同的操作时,它不起作用。追查我发现的问题:
当我从邮递员发送请求时,会话如下所示:
Session
cookie:
path: '/',
_expires: null,
originalMaxAge: null,
httpOnly: true
,
passport:
user: 58f0865eb9b69e1d38fa135b
当我从 Angular 发送请求时,会话如下所示:
Session
cookie:
path: '/',
_expires: null,
originalMaxAge: null,
httpOnly: true
因为 with passport 策略无法反序列化用户。我不知道为什么会这样,任何帮助将不胜感激。
服务器代码:
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded( extended: true ));
app.use(expressValidator(
customValidators:
isArray: function (value)
return Array.isArray(value);
,
errorFormatter: function (param, msg, value)
var namespace = param.split('.')
, root = namespace.shift()
, formParam = root;
while (namespace.length)
formParam += '[' + namespace.shift() + ']';
return
param: formParam,
msg: msg,
value: value
;
));
app.use(cookieParser());
app.use(expressSession( secret: 'untoldstoryofninja', resave: false, saveUninitialized: true ));
app.use(cors());
app.use(passport.initialize());
app.use(passport.session());
// routes ========================================================================================
app.use(require('./config/routes/routes.js')(passport));
app.all('*', (req, res) => res.status(404).send( msg: 'No API Route.' ));
护照攻略:
module.exports = function (passport)
passport.use(new LocalStrategy( usernameField: "username", passwordField: "password" ,
function (username, password, done)
User.findOne( username: username , function (err, user)
if (err) return done(err);
if (!user) return done(null, false);
if (user.comparePassword(password, function (err, isMatch)
if (isMatch && !err)
done(null, user)
else
done(null, false);
));
);
));
passport.serializeUser(function (user, done)
done(null, user._id);
);
passport.deserializeUser(function (id, done)
User.findById( _id: id , function (err, user)
done(err, user);
);
);
;
【问题讨论】:
【参考方案1】:你需要做的
passReqToCallback: 真
passport.use(new LocalStrategy(
usernameField: 'email',
passwordField: 'passwd',
passReqToCallback: true,
session: false
,
function(req, username, password, done)
// request object is now first argument
// ...
));
还要确保您的字段名称与
匹配sernameField: 'email',
密码字段:'passwd',
【讨论】:
仍然遇到同样的问题以上是关于护照会话不存在的主要内容,如果未能解决你的问题,请参考以下文章
PHP会话变量在不应该存在的时候存在,在应该存在的时候不存在