Google Passport 身份驗證
我們有 npm 的簡單模組,用於護目鏡認證名稱 passport-google-oauth20
請考慮以下示例在此示例中建立了一個資料夾,即在根目錄中具有 passport.js 和 google.js 檔案的 config。在你的 app.js 中包含以下內容
var express = require('express');
var session = require('express-session');
var passport = require('./config/passport'); // path where the passport file placed
var app = express();
passport(app);
//用於初始化伺服器的其他程式碼,錯誤控制代碼
在 config 資料夾中的 passport.js 檔案中包含以下程式碼
var passport = require ('passport'),
google = require('./google'),
User = require('./../model/user'); // User is the mongoose model
module.exports = function(app){
app.use(passport.initialize());
app.use(passport.session());
passport.serializeUser(function(user, done){
done(null, user);
});
passport.deserializeUser(function (user, done) {
done(null, user);
});
google();
};
在同一配置資料夾中的 google.js 檔案中包括以下內容
var passport = require('passport'),
GoogleStrategy = require('passport-google-oauth20').Strategy,
User = require('./../model/user');
module.exports = function () {
passport.use(new GoogleStrategy({
clientID: 'CLIENT ID',
clientSecret: 'CLIENT SECRET',
callbackURL: "http://localhost:3000/auth/google/callback"
},
function(accessToken, refreshToken, profile, cb) {
User.findOne({ googleId : profile.id }, function (err, user) {
if(err){
return cb(err, false, {message : err});
}else {
if (user != '' && user != null) {
return cb(null, user, {message : "User "});
} else {
var username = profile.displayName.split(' ');
var userData = new User({
name : profile.displayName,
username : username[0],
password : username[0],
facebookId : '',
googleId : profile.id,
});
// send email to user just in case required to send the newly created
// credentails to user for future login without using google login
userData.save(function (err, newuser) {
if (err) {
return cb(null, false, {message : err + " !!! Please try again"});
}else{
return cb(null, newuser);
}
});
}
}
});
}
));
};
在此示例中,如果使用者不在 DB 中,則使用使用者模型中的欄位名稱 googleId 在 DB 中建立新使用者以進行本地引用。