Node.js 使用Google oauth访问时创建vs登录

Node.js 使用Google oauth访问时创建vs登录,node.js,passport.js,google-oauth,Node.js,Passport.js,Google Oauth,我目前正在尝试设置我的服务器,以允许用户使用google oauth 2.0登录 我正在使用passport和passport google oauth 正常设置类似于: var GoogleStrategy=require('passport-google-oauth')。OAuth2Strategy passport.use(new GoogleStrategy({ clientID: GOOGLE_CLIENT_ID, clientSecret: GOOGLE_CLIENT

我目前正在尝试设置我的服务器,以允许用户使用google oauth 2.0登录

我正在使用passport和passport google oauth

正常设置类似于:

var GoogleStrategy=require('passport-google-oauth')。OAuth2Strategy

passport.use(new GoogleStrategy({
    clientID: GOOGLE_CLIENT_ID,
    clientSecret: GOOGLE_CLIENT_SECRET,
    callbackURL: "http://127.0.0.1:3000/auth/google/callback"
  },
  function(accessToken, refreshToken, profile, done) {
    User.findOrCreate({ googleId: profile.id }, function (err, user) {
      return done(err, user);
    });
  }
));
然而,我真正想要的是在帐户被批准后仍然控制对我的服务器的访问

这意味着用户将首先使用谷歌“创建”和账户,然后在该账户获得批准后即可登录

我真的希望有一个注册路径和登录路径:

app.get('/auth/google/signup',
  passport.authenticate('google', { scope: ['profile', 'email'] }));

app.get('/auth/google',
  passport.authenticate('google', { scope: 'https://www.googleapis.com/auth/plus.login' }));

app.get('/auth/google/callback', 
  passport.authenticate('google', { failureRedirect: '/login' }),
  function(req, res) {
    // Successful authentication, redirect home.
    res.redirect('/');
  });
我的问题是,当我进入谷歌战略设置时,我真的不知道他们最初选择了哪条路线。也就是说,如果他们点击了登录路径,但没有创建帐户,我不想创建帐户,我想警告他们,他们还没有创建帐户。如果他们点击了注册路线,并且已经有了一个帐户,我就不想再创建另一个帐户,我只会告诉他们已经有了一个帐户


谷歌的策略中是否有我可以告诉用户最初在我的服务器上点击的路线?

在您的用户模型中创建“approved”字段,默认为False(布尔值)

你可以在谷歌的策略中检查这个字段来限制访问

如果要将此应用于所有策略,可以在passport中的序列化方法上进行筛选


希望有帮助。

您可以在初始请求中传递一个“状态”查询参数,该参数将往返返回回调

此处记录:

陈述 任何字符串都提供可能对您的应用程序有用的任何状态 在收到答复后提出申请。谷歌授权 服务器往返此参数,因此应用程序将接收 它发送的值相同。减轻跨站点请求伪造的风险 (CSRF),强烈建议在 状态,并在响应中确认。有关详细信息,请参阅OpenID Connect 如何执行此操作的示例


谢谢你的回答。不幸的是,我的困惑不是如何判断我的用户是否被批准。它是如何在后端判断用户是否点击了登录路径或注册路径。不同的路线,都在同一个谷歌策略处理程序中结束。在passport示例中,他们称之为创建或更新帐户。但我只想在他们点击注册时创建,并且只想在他们点击登录时存储令牌。