Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var LocalStrategy = require('passport-local').Strategy;
- var FacebookStrategy = require('passport-facebook').Strategy;
- var TwitterStrategy = require('passport-twitter').Strategy;
- var GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
- var User = require('../app/models/db/user');
- var configAuth = require('./auth'); //載入金鑰
- module.exports = function (passport) {
- //passport設定
- // used to serialize the user for the session
- passport.serializeUser(function (user, done) {
- done(null, user.id);
- });
- // used to deserialize the user
- passport.deserializeUser(function (id, done) {
- User.findById(id, function (err, user) {
- done(err, user);
- });
- });
- // local login
- passport.use('local-login', new LocalStrategy({
- usernameField: 'email',
- passwordField: 'password',
- passReqToCallback: true
- },
- function (req, email, password, done) {
- if (email)
- email = email.toLowerCase();
- process.nextTick(function () {
- User.findOne({
- 'local.email': email
- }, function (err, user) {
- if (err)
- return done(err);
- if (!user)
- return done(null, false, req.flash('登入訊息', '找不到使用者'));
- if (!user.validPassword(password))
- return done(null, false, req.flash('登入訊息', '密碼錯誤'));
- else
- return done(null, user);
- });
- });
- }));
- // 本機註冊
- passport.use('local-signup', new LocalStrategy({
- usernameField: 'email',
- passwordField: 'password',
- usernameField: 'username',
- birthdayField: 'birthday',
- psexField: 'sex',
- passReqToCallback: true
- },
- function (req, email, password, username, birthday, sex, done) {
- if (email)
- email = email.toLowerCase();
- process.nextTick(function () {
- if (!req.user) {
- User.findOne({
- 'local.email': email
- }, function (err, user) {
- if (err)
- return done(err);
- if (user) {
- return done(null, false, req.flash('註冊訊息', '這個帳號已經被使用過了'));
- } else {
- // create the user
- var newUser = new User();
- newUser.local.email = email;
- newUser.local.password = newUser.generateHash(password);
- newUser.local.username = username;
- newUser.local.birthday = birthday;
- newUser.local.sex = sex;
- newUser.save(function (err) {
- if (err)
- return done(err);
- return done(null, newUser);
- });
- }
- });
- } else if (!req.user.local.email) {
- User.findOne({
- 'local.email': email
- }, function (err, user) {
- if (err)
- return done(err);
- if (user) {
- return done(null, false, req.flash('登入訊息', '這個帳號已經被註冊過了'));
- } else {
- var user = req.user;
- user.local.email = email;
- user.local.password = user.generateHash(password);
- user.local.username = username;
- user.local.birthday = birthday;
- user.local.sex = sex;
- user.save(function (err) {
- if (err)
- return done(err);
- return done(null, user);
- });
- }
- });
- } else {
- return done(null, req.user, req.flash('登入訊息', '用戶登入中,請確認是否使用其他裝置登入中'));
- }
- });
- }));
- //臉書
- var fbStrategy = configAuth.facebookAuth;
- fbStrategy.passReqToCallback = true;
- passport.use(new FacebookStrategy(fbStrategy,
- function (req, token, refreshToken, home, done) {
- process.nextTick(function () {
- if (!req.user) {
- User.findOne({
- 'facebook.id': home.id
- }, function (err, user) {
- if (err)
- return done(err);
- if (user) {
- if (!user.facebook.token) {
- user.facebook.token = token;
- user.facebook.name = home.name.givenName + ' ' + home.name.familyName;
- user.facebook.email = (home.emails[0].value || '').toLowerCase();
- user.save(function (err) {
- if (err)
- return done(err);
- return done(null, user);
- });
- }
- return done(null, user);
- } else {
- var newUser = new User();
- newUser.facebook.id = home.id;
- newUser.facebook.token = token;
- newUser.facebook.name = home.name.givenName + ' ' + home.name.familyName;
- newUser.facebook.email = (home.emails[0].value || '').toLowerCase();
- // newUser.facebook.birthday = home.birthday;
- // newUser.facebook.sex = home.sex;
- newUser.save(function (err) {
- if (err)
- return done(err);
- return done(null, newUser);
- });
- }
- });
- } else {
- var user = req.user;
- user.facebook.id = home.id;
- user.facebook.token = token;
- user.facebook.name = home.name.givenName + ' ' + home.name.familyName;
- user.facebook.email = (home.emails[0].value || '').toLowerCase();
- // user.facebook.birthday =home.birthday;
- // user.facebook.sex =home.sex;
- user.save(function (err) {
- if (err)
- return done(err);
- return done(null, user);
- });
- }
- });
- }));
- // TWITTER
- passport.use(new TwitterStrategy({
- consumerKey: configAuth.twitterAuth.consumerKey,
- consumerSecret: configAuth.twitterAuth.consumerSecret,
- callbackURL: configAuth.twitterAuth.callbackURL,
- passReqToCallback: true
- },
- function (req, token, tokenSecret, home, done) {
- process.nextTick(function () {
- if (!req.user) {
- User.findOne({
- 'twitter.id': home.id
- }, function (err, user) {
- if (err)
- return done(err);
- if (user) {
- if (!user.twitter.token) {
- user.twitter.token = token;
- user.twitter.username = home.username;
- user.twitter.displayName = home.displayName;
- // user.twitter.birthday = home.birthday;
- // user.twitter.sex = home.sex;
- user.save(function (err) {
- if (err)
- return done(err);
- return done(null, user);
- });
- }
- return done(null, user);
- } else {
- var newUser = new User();
- newUser.twitter.id = home.id;
- newUser.twitter.token = token;
- newUser.twitter.username = home.username;
- newUser.twitter.displayName = home.displayName;
- // newUser.twitter.birthday = home.birthday;
- // newUser.twitter.sex = home.sex;
- newUser.save(function (err) {
- if (err)
- return done(err);
- return done(null, newUser);
- });
- }
- });
- } else {
- var user = req.user;
- user.twitter.id = home.id;
- user.twitter.token = token;
- user.twitter.username = home.username;
- user.twitter.displayName = home.displayName;
- // user.twitter.birthday = home.birthday;
- // user.twitter.sex = home.sex;
- user.save(function (err) {
- if (err)
- return done(err);
- return done(null, user);
- });
- }
- });
- }));
- // GOOGLE
- passport.use(new GoogleStrategy({
- clientID: configAuth.googleAuth.clientID,
- clientSecret: configAuth.googleAuth.clientSecret,
- callbackURL: configAuth.googleAuth.callbackURL,
- passReqToCallback: true
- },
- function (req, token, refreshToken, home, done) {
- process.nextTick(function () {
- if (!req.user) {
- User.findOne({
- 'google.id': home.id
- }, function (err, user) {
- if (err)
- return done(err);
- if (user) {
- if (!user.google.token) {
- user.google.token = token;
- user.google.name = home.displayName;
- user.google.email = (home.emails[0].value || '').toLowerCase();
- // user.google.birthday = home.birthday;
- // user.google.sex = home.sex;
- user.save(function (err) {
- if (err)
- return done(err);
- return done(null, user);
- });
- }
- return done(null, user);
- } else {
- var newUser = new User();
- newUser.google.id = home.id;
- newUser.google.token = token;
- newUser.google.name = home.displayName;
- newUser.google.email = (home.emails[0].value || '').toLowerCase();
- // newUser.twitter.birthday = home.birthday;
- // newUser.twitter.sex = home.sex;
- newUser.save(function (err) {
- if (err)
- return done(err);
- return done(null, newUser);
- });
- }
- });
- } else {
- var user = req.user;
- user.google.id = home.id;
- user.google.token = token;
- user.google.name = home.displayName;
- user.google.email = (home.emails[0].value || '').toLowerCase();
- // user.google.birthday = home.birthday;
- // user.google.sex = home.sex;
- user.save(function (err) {
- if (err)
- return done(err);
- return done(null, user);
- });
- }
- });
- }));
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement