簡體   English   中英

使用Google oauth訪問時創建與登錄

[英]Create vs Login when using Google oauth for access

我目前正在嘗試設置服務器,以允許用戶使用google oauth 2.0登錄。

我正在使用護照和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);
    });
  }
));

但是,我真正想要的是在帳戶獲得批准后仍然控制對服務器的訪問。

這意味着用戶將首先使用Google“創建”和帳戶,然后一旦該帳戶獲得批准就可以登錄。

我真的很希望有一個注冊路線和登錄路線:

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('/');
  });

我的問題是,當我進入GoogleStrategy設置時,並不真正知道他們最初選擇的路線。 IE瀏覽器,如果他們點擊了登錄路徑,但是還沒有創建一個帳戶,我不想創建一個帳戶。我想警告他們,他們還沒有創建一個帳戶。 如果他們按了注冊路線並且已經有一個帳戶,我不想創建另一個帳戶,我只是告訴他們他們已經有一個帳戶。

無論如何,GoogleStrategy中是否可以告訴用戶最初在我的服務器上命中的路由?

在您的用戶模型中,創建“批准”字段,默認為False(布爾值)

並且您可以在GoogleStrategy上檢查此字段以限制訪問。

如果要將其應用於所有策略,則可以過濾護照中的序列化方法。

希望能幫助到你。

您可以在初始請求中傳遞一個“狀態”查詢參數,該參數將返回給您的回調。

此處記錄: https : //developers.google.com/identity/protocols/OAuth2WebServer

state Any string在收到響應后,提供可能對您的應用程序有用的任何狀態。 Google授權服務器會往返傳遞此參數,因此您的應用程序會收到與發送的相同值。 為了減輕跨站點請求偽造(CSRF),強烈建議在狀態中包含一個防偽令牌,並在響應中進行確認。 有關如何執行此操作的示例,請參見OpenID Connect。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM