小编lag*_*lex的帖子

在Node.js Passport的Google策略上自定义returnUrl

我正在使用Express和Passport OpenID Google策略,我想在每个auth请求上设置returnURL,以便能够返回启动该身份验证的页面.

情况是我有带有Node.js后端的HTML5幻灯片应用程序(以及社交内容和编辑器以及Portal和扩展... https://github.com/bubersson/humla)我希望能够登录用户一些幻灯片(通过幻灯片菜单...)但我希望他能轻松回到同一张幻灯片.

所以我需要这样的东西?

app.get('/auth/google', function(req,res) {
   var cust = "http://localhost:1338/"+req.params.xxx;
   passport.authenticate('google', returnURL:cust, function ...
} 
Run Code Online (Sandbox Code Playgroud)

我读过Passport的指南,但仍然不知道该怎么做.我知道这不安全,但我怎么办呢?

或者,如何让应用程序返回到启动登录的页面?或者有没有办法使用AJAX进行OpenID身份验证(并且仍然可以使用护照)?

node.js express passport.js

19
推荐指数
3
解决办法
9327
查看次数

Passport - Node.js没有返回刷新令牌

我试图使用node.js的passport模块返回一个refreshToken.但是我使用下面的代码,我无法记录任何刷新令牌,但访问令牌工作正常.有没有办法为这个模块指定脱机访问类型,希望能够返回这个?

var GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
 passport.use(new GoogleStrategy({
 clientID: GOOGLE_CLIENT_ID,
 clientSecret: GOOGLE_CLIENT_SECRET,
 callbackURL: "http://myurl/auth/callback"
 },
 function(accessToken, refreshToken, profile, done) {                                                            
  console.log(refreshToken);
  process.nextTick(function () {
      return done(null, [{token:accessToken}, {rToken:refreshToken}, {profile:profile}]);
  });
}
));
Run Code Online (Sandbox Code Playgroud)

这会将refreshToken返回为undefined.

任何帮助将不胜感激.

javascript node.js oauth-2.0 passport.js

19
推荐指数
2
解决办法
4748
查看次数

Node.js/Express/Passport是否有像CanCan for Rails这样的授权模块?

一旦用户进行了身份验证,我想要一种方法来设置用户可以查看,编辑和删除的限制.具体来说,除非他们是管理员,否则他们可以查看,编辑和删除他们拥有的唯一文件.我看过EveryAuth和Ability.js的一些例子,只是想知道是否有使用Passport.js的等价物.

node.js express passport.js

18
推荐指数
1
解决办法
5709
查看次数

PassportJS:如何在我的视图中获取req.user

我正在使用带有快速2.x和会话存储的pssportjs.登录后,我只得到req.User一次.只要我再次重定向req.User是未定义的.

这是我的配置:

passport.serializeUser(function(user, done) {
  done(null, user._id);
});

passport.deserializeUser(function(userId, done) {
  User.findOne({_id: userId} ,function(err, user){
    done(err, user);
  });
});

// Authentication Strategy
passport.use(new FacebookStrategy({
    clientID: CONFIG.fb.appId,
    clientSecret: CONFIG.fb.appSecret,
    callbackURL: CONFIG.fb.callbackURL
  },
  function(accessToken, refreshToken, profile, done) {
    // asynchronous verification, for effect...
    process.nextTick(function () {

      User.findOne({ 'accounts.uid': profile.id, 'accounts.provider': 'facebook' }, function(err, olduser) {

          if(olduser) {
            done(null, olduser);
          } else {
            var newuser       = new User();
            var account       = {provider: "facebook", uid: profile.id};
            newuser.accounts.push(account);
            newuser.firstname = profile.name.givenName;
            newuser.lastname  = profile.name.familyName; …
Run Code Online (Sandbox Code Playgroud)

node.js express passport.js

17
推荐指数
1
解决办法
2万
查看次数

Node.js Express Passport Cookie到期

我在我的应用程序中使用Passport进行身份验证,我也在使用Express.总结一下我的问题:我的登录功能最初工作正常,但在任何用户的会话超时后,没有用户能够登录.

我使用标准的本地策略进行身份验证.

我会根据我的设置尽可能包含一个例子:

//-------------
//Set up authentication with Passport
//-------------
var userModel = require('./models/user')(db);
passport.use(new LocalStrategy(
    function(username, password, done) {
        var errorMessage = 'Incorrect username/password combination.';
        userModel.GetUserByUsername(username, function(err, user) {
            if (err) { return done(err); }
            if (!user) {
              return done(null, false, { message: errorMessage });
            }

            user.validatePassword(password, function(isPasswordCorrect) {
                if (!isPasswordCorrect)
                {
                    return done(null, false, { message: errorMessage });
                }

                //Update with login date
                userModel.UpdateUserWithLogin(username, user.currentLoginTime, function(err){
                    //if we have an error here, we …
Run Code Online (Sandbox Code Playgroud)

node.js express passport.js

17
推荐指数
1
解决办法
2万
查看次数

Neo4j Cypher中有多个不相关的查询?

难道http://localhost:7474/browser/不支持多个不相关的查询?

这段代码:

MATCH (a {cond:'1'}), (b {cond:'x'}) CREATE a-[:rel]->b
MATCH (a {cond:'2'}), (b {cond:'y'}) CREATE a-[:rel]->b
MATCH (a {cond:'3'}), (b {cond:'z'}) CREATE a-[:rel]->b
Run Code Online (Sandbox Code Playgroud)

导致错误:

CREATE和MATCH之间需要WITH

但由于我的查询不相关,我认为我不需要WITH.

如何在不必一次一行输入的情况下完成上述操作?

neo4j cypher

17
推荐指数
2
解决办法
1万
查看次数

node.js回调中'done'和'next'之间的差异

在护照[configure authentication]文档中,它有一个相当可怕的功能,使用神秘的功能"完成".

passport.use(new LocalStrategy(
  function(username, password, done) {
    User.findOne({ username: username }, function (err, user) {
      if (err) { return done(err); }
      if (!user) {
        return done(null, false, { message: 'Incorrect username.' });
      }
      if (!user.validPassword(password)) {
        return done(null, false, { message: 'Incorrect password.' });
      }
      return done(null, user);
    });
   }
));
Run Code Online (Sandbox Code Playgroud)

现在,在快速文档中,有很多方法可以传递下一个名为next的东西.

app.use(function(err, req, res, next){
  console.error(err.stack);
  res.status(500).send('Something broke!');
});
Run Code Online (Sandbox Code Playgroud)

这是两个框架,快递和护照之间的区别吗?或者他们正在做两件事吗?

javascript node.js express passport.js

17
推荐指数
3
解决办法
1万
查看次数

passport-facebook:如何动态设置callbackURL?

我正在按照这个例子来设置FacebookStrategy - https://github.com/jaredhanson/passport-facebook/blob/master/examples/login/app.js

我想动态设置callbackURL,即:用户访问/ posts/34所以回调将是/ posts/34/callback

我怎样才能实现这样的目标?

node.js express passport.js

16
推荐指数
2
解决办法
9161
查看次数

错误:无法在会话中找到请求令牌

我在主要护照回购中发现了一些问题,但是,我认为这主要与这个特定策略有关,因为我能够使用passport-google-oauth策略成功进行身份验证.

Error: failed to find request token in session
    at Strategy.OAuthStrategy.authenticate (/home/glug/application/node_modules/passport-dropbox/node_modules/passport-oauth/lib/passport-oauth/strategies/oauth.js:124:54)
    at attempt (/home/glug/application/node_modules/passport/lib/passport/middleware/authenticate.js:243:16)
    at Passport.authenticate (/home/glug/application/node_modules/passport/lib/passport/middleware/authenticate.js:244:7)
    at callbacks (/home/glug/application/node_modules/express/lib/router/index.js:161:37)
    at param (/home/glug/application/node_modules/express/lib/router/index.js:135:11)
    at pass (/home/glug/application/node_modules/express/lib/router/index.js:142:5)
    at Router._dispatch (/home/glug/application/node_modules/express/lib/router/index.js:170:5)
    at Object.router (/home/glug/application/node_modules/express/lib/router/index.js:33:10)
    at Context.next (/home/glug/application/node_modules/express/node_modules/connect/lib/proto.js:190:15)
    at Context.actions.pass (/home/glug/application/node_modules/passport/lib/passport/context/http/actions.js:77:8)
Run Code Online (Sandbox Code Playgroud)

我使用redis作为会话存储,但是,即使在消除了它之后,仍然会出现相同的错误消息.

var DropboxStrategy = require('passport-dropbox').Strategy;

app.configure(function(){
  app.set('port', config.express.port);
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(express.cookieParser());
        app.use(express.session({
//        store: new RedisStore({ client: redis}),
        secret: config.express.secret
        }));
        app.use(passport.initialize());
        app.use(passport.session());
  app.use(app.router);
});

passport.serializeUser(function(user, done) {
//    console.log('Serializing: ' + JSON.stringify(user));
    done(null, user);
});

passport.deserializeUser(function(obj, done) { …
Run Code Online (Sandbox Code Playgroud)

node.js express dropbox-api passport.js

16
推荐指数
1
解决办法
5890
查看次数

使用passport-facebook从Facebook检索照片

我可以通过passport-facebook检索基本用户信息,按照以下代码并保存在mongodb中:

app.get("/auth/facebook", passport.authenticate("facebook", { scope : ["email", "publish_stream", "user_location", "user_hometown", "user_birthday", "read_friendlists"]}));

app.get("/auth/facebook/callback", passport.authenticate("facebook",{ successRedirect: '/', failureRedirect: '/'}));

var mongoose = require('mongoose'), 
FacebookStrategy = require('passport-facebook').Strategy, 
Users = mongoose.model('Users');

module.exports = function (passport, config) { 
passport.serializeUser(function(user, done) { 
    done(null, user.id);
}); 

passport.deserializeUser(function(id, done) { 
    Users.findOne({ _id: id }, function (err, user) { 
        done(err, user); 
    });
});

passport.use(new FacebookStrategy({ 
    clientID: config.facebook.clientID,
    clientSecret: config.facebook.clientSecret,
    callbackURL: config.facebook.callbackURL 
}, function(accessToken, refreshToken, profile, done) { 
    Users.findOrCreateFaceBookUser(profile, done);
}));};
Run Code Online (Sandbox Code Playgroud)

但是,我无法在"个人资料"中看到个人资料图片.

文档https://github.com/jaredhanson/passport-facebook说要检索我们需要传递profileFields的照片,如下所示.但是这样做,我能够看到照片网址,但却丢失了_json中包含的其他数据,例如profile._json.location.name.如何检索包含其他用户信息的照片?

passport.use(new FacebookStrategy({
// clientID, …
Run Code Online (Sandbox Code Playgroud)

node.js express passport-facebook passport.js

16
推荐指数
3
解决办法
1万
查看次数