结合koa-passport和koa-router(获取用户数据)
Combining koa-passport with koa-router (getting user data)
我创建了一个登录名,它可以登录用户并存储用户(如果他们是数据库中的新用户)。
然后用户被重定向到 /
,然后检查他们是否通过身份验证,见下文 (app.js):
.get('/', function* () {
if (this.isAuthenticated()) {
yield this.render('homeSecure', {}); // <-- need user data here
} else {
yield this.render('homePublic', {});
}
正如我在代码中评论的那样,我想发送已登录的用户对象。我不知道如何获取登录人员的 ID 作为 koa 的一般文档没有快递那么完整
我正在使用 koa-generic-session-mongo
来处理我的会话。这是我的 GoogleStrategy (auth.js):
var user = null;
// ...
var GoogleStrategy = require('passport-google').Strategy;
passport.use(new GoogleStrategy({
returnURL: 'http://localhost:' + (process.env.PORT || 3000) + '/auth/google/callback',
realm: 'http://localhost:' + (process.env.PORT || 3000)
},
function (identifier, profile, done) {
var emails = new Array();
for (var i = 0; i < profile.emails.length; i++) {
emails.push(profile.emails[i].value);
}
co(function* () {
yield users.findOne({
emails: emails
});
});
if (user === null) { // first time signin, create account
co(function* () {
user = {
id: 1,
name: profile.displayName,
emails: emails
};
yield users.insert(user);
});
}
console.log(user);
done(null, user);
}));
免责声明:我没有使用过 koa-passport,我只是看了代码。
根据the source code of the koa-passport library,您要找的属性是passport.user
,用法如下:
app.use( function*(){
var user = this.passport.user
})
因此,您的代码示例将变为
.get('/', function* () {
if (this.isAuthenticated()) {
yield this.render('homeSecure', this.passport.user );
} else {
yield this.render('homePublic', {});
}
如果这不起作用,this file 让我怀疑 koa-passport 遵循标准护照接口并为请求提供 this.user
。
publicRouter
.get('/', function* () {
if (this.isAuthenticated()) {
yield this.render('homeSecure', {
user: this.req.user
});
} else {
yield this.render('homePublic', {});
}
})...
我创建了一个登录名,它可以登录用户并存储用户(如果他们是数据库中的新用户)。
然后用户被重定向到 /
,然后检查他们是否通过身份验证,见下文 (app.js):
.get('/', function* () {
if (this.isAuthenticated()) {
yield this.render('homeSecure', {}); // <-- need user data here
} else {
yield this.render('homePublic', {});
}
正如我在代码中评论的那样,我想发送已登录的用户对象。我不知道如何获取登录人员的 ID 作为 koa 的一般文档没有快递那么完整
我正在使用 koa-generic-session-mongo
来处理我的会话。这是我的 GoogleStrategy (auth.js):
var user = null;
// ...
var GoogleStrategy = require('passport-google').Strategy;
passport.use(new GoogleStrategy({
returnURL: 'http://localhost:' + (process.env.PORT || 3000) + '/auth/google/callback',
realm: 'http://localhost:' + (process.env.PORT || 3000)
},
function (identifier, profile, done) {
var emails = new Array();
for (var i = 0; i < profile.emails.length; i++) {
emails.push(profile.emails[i].value);
}
co(function* () {
yield users.findOne({
emails: emails
});
});
if (user === null) { // first time signin, create account
co(function* () {
user = {
id: 1,
name: profile.displayName,
emails: emails
};
yield users.insert(user);
});
}
console.log(user);
done(null, user);
}));
免责声明:我没有使用过 koa-passport,我只是看了代码。
根据the source code of the koa-passport library,您要找的属性是passport.user
,用法如下:
app.use( function*(){
var user = this.passport.user
})
因此,您的代码示例将变为
.get('/', function* () {
if (this.isAuthenticated()) {
yield this.render('homeSecure', this.passport.user );
} else {
yield this.render('homePublic', {});
}
如果这不起作用,this file 让我怀疑 koa-passport 遵循标准护照接口并为请求提供 this.user
。
publicRouter
.get('/', function* () {
if (this.isAuthenticated()) {
yield this.render('homeSecure', {
user: this.req.user
});
} else {
yield this.render('homePublic', {});
}
})...