在Facebook上对nodejs护照身份验证的回调中,如何req在回调中获取对象?
passport.use(new FacebookStrategy({
clientID: 123456789,
clientSecret: 'SECRET',
callbackURL: "http://example.com/login/facebook/callback"
},
function(accessToken, refreshToken, profile, done){
// Is there any way to get the req object in here?
}
));
Run Code Online (Sandbox Code Playgroud) authentication facebook node.js facebook-authentication passport.js
我正在将Django站点移植到Node.js,我正在尝试在Node中重新实现Django set password方法.这是Django代码
from django.utils.crypto import (
pbkdf2, get_random_string)
import hashlib
password = 'text1'
algorithm = "pbkdf2_sha256"
iterations = 10000
salt = 'p9Tkr6uqxKtf'
digest = hashlib.sha256
hash = pbkdf2(password, salt, iterations, digest=self.digest)
hash = hash.encode('base64').strip()
print "%s$%d$%s$%s" % (self.algorithm, iterations, salt, hash)
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止的Node.js代码:
var password = 'text1';
var hashed = crypto.createHash('sha256').update(password, 'utf8').digest();
var salt = 'p9Tkr6uqxKtf';
var algorithm = "pbkdf2_sha256";
var iterations = 10000;
crypto.pbkdf2(hashed, salt, iterations, 32, function(err, encodedPassword) {
var newPass = new Buffer(encodedPassword).toString('base64');
console.log(encodedPassword);
// console.log(Buffer(encodedPassword, 'binary').toString('hex')); …Run Code Online (Sandbox Code Playgroud) 我创建了一个简单的登录表单,使用Jade和Express at/login,表单数据通过POST发送到/ login
起初它只是基于字符串的匹配(如果用户名== &&密码==)然后重定向到/ home或重定向到/ login
简单.
现在我想让它存储在mongodb数据库中的数据库驱动程序,用户名和密码,匹配db的用户名密码并执行程序.
我希望使用passportJS,但我完全不知所措,从创建数据库到配置护照.
有人可以帮助我如何制作一个简单的数据库驱动的登录页面?我对nodejs的东西很新.任何帮助都会受到重视
我想找个方法来选择#inner3......
<div id="outer">
<div id="inner1"> </div>
<div id="inner2"> </div>
<div id="inner3"> of interest </div>
<div id="inner4"> </div>
</div>
Run Code Online (Sandbox Code Playgroud)
...从最后一次计数(#inner4)因为有时#2不存在...
<div id="outer">
<div id="inner1"> </div>
<div id="inner2"> of interest </div>
<div id="inner3"> </div>
</div>
Run Code Online (Sandbox Code Playgroud)
并且只有3个项目(因此#inner3变为#inner2).
请注意,#id为了清楚起见,并没有真正出现在我的工作中.
我正在使用,body > .. > div:nth-child(3)但如上所述,从顶部算起是一个问题.
对此有何解决方案?
我正在尝试使用angularjs和护照从twitter获取信息.
我使用护照js通过OAuth进行了身份验证 - 它运行良好 - 在会话中保存了用户信息.
现在我尝试在任何端点(包括V1.1和V1)的twitter API上运行任何GET命令,但它一直在抱怨授权.
示例:在我的控制器中执行
$http.jsonp(https://api.twitter.com/1/statuses/user_timeline.json, {
})
Run Code Online (Sandbox Code Playgroud)
给我一个错误:
GET https://api.twitter.com/1/statuses/user_timeline.json 401 (Unauthorized)
Run Code Online (Sandbox Code Playgroud)
此命令在twitter控制台中有效(我使用jsonp来避免跨域问题).
我应该使用此GET请求手动传递任何其他标头 - sa auth_token等吗?
或者为什么它不起作用?我是否应该利用我已经使用API进行身份验证的事实?我红了https://dev.twitter.com/docs/auth/authorizing-request但是并没有安静地理解.
谢谢你的帮助,
是否可以使用自定义回调和禁用会话?在文档中,它显示了如何禁用会话和自定义回调,但我如何组合它们?
app.get('/login', function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
if (err) { return next(err); }
if (!user) { return res.redirect('/login'); }
req.logIn(user, function(err) {
// I'm getting an error here
// [Error: Failed to serialize user into session]
if (err) { return next(err); }
return res.redirect('/users/' + user.username);
});
})(req, res, next);
});
Run Code Online (Sandbox Code Playgroud) 是否有可以从Node.js代码执行的本机函数,该代码输出一个数组或一个对象,其中包含有关当前应该在事件循环中的内容的信息?
我正在尝试进行扑克模拟并获得有关扑克桌的以下数据
player[0].score == player[1].score,他们并列)我不知道每个玩家应该赢得多少,而不需要创建副圈并为每个玩家分配玩家.
例如,
player[0].contributed = 100
player[1].contributed = 80
player[2].contributed = 20
Run Code Online (Sandbox Code Playgroud)
player[0].score = 10
player[1].score = 2
player[2].score = 10
Run Code Online (Sandbox Code Playgroud)
total_pot = 200;
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我首先需要返回player[0]20并将其从锅中取出吗?
然后,因为player[0]并且player[2]已经并列第一名并且player[1]已经输了,所以应该将底池划分为:
player[0].received = 170
player[1].received = 0
player[2].received = 30
Run Code Online (Sandbox Code Playgroud)
然后,如果player[1]赢了,应该将底池划分为:
player[0].received = 20
player[1].received = 180
player[2].received = 0
Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中使用护照模块(github身份验证),我想根据操作重定向...我检查它是否只是正常登录或用户是否第一次登录.
passport.use(new GitHubStrategy({
clientID: conf.github.app_id,
clientSecret: conf.github.app_secret,
callbackURL: conf.github.callback_url
},
function(accessToken, refreshToken, profile, done) {
// asynchronous verification, for effect...
process.nextTick(function () {
// To keep the example simple, the user's GitHub profile is returned to
// represent the logged-in user. In a typical application, you would want
// to associate the GitHub account with a user record in your database,
// and return that user instead.
Models_User.findOrCreateUser(profile, function(msg){
console.log("auth type:" + msg);
});
return done(null, profile);
});
}
)); …Run Code Online (Sandbox Code Playgroud) 我正在开发一个将部署到Heroku的Web应用程序.
我选择使用Node.js堆栈,因为我厌倦了"传统"的Web框架.我在Express.js上设计应用程序.与Django或Grails相比,我发现它非常高效和直观.
因此,Web应用程序将为访客和经过身份验证的用户提供功能.当应用程序部署到Heroku(一个云平台服务)时,由于Heroku的负载平衡器和实践,应用程序不能在服务器内部存储任何内部状态.事实上,在分布式环境中拥有内部状态也是糟糕的设计.
我的本地开发设置有一个Redis实例(用于存储会话)和一个MongoDB实例(用于存储用户数据,例如Facebook用户详细信息).我使用Passport.js和passport-facebook来处理身份验证.目前,我只实施了Facebook身份验证,至少在本地工作正常.
问题是我不确定也没有读过Express/Passport如何神奇地填充req.user对象.我对此有点怀疑,感觉就像是存储在服务器的内存中.
passport.serializeUser(function(user, done) {
console.log(
"This outputs a complete" +
"User Profile object when the user logs in.",
user);
done(null, user);
});
passport.deserializeUser(function(obj, done) {
console.log(
"And this too, but I'm afraid that" +
"obj comes from memory.",
obj);
done(null, obj);
});
Run Code Online (Sandbox Code Playgroud)
Passport.js文档并没有很好地说明这一点.我的猜测是serializeUser()从Facebook获取用户,但是deserializeUser()从内存中获取它?
如果是这样,它是一个解决方案将原始用户数据转储到serializeUser()中的Mongo数据库,然后从deserializeUser()中获取它吗?