[英]How to combine Json Web Token(JWT) and google oauth using passportjs, passport-google-oauth and node to create social login system?
[英]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.