Я ноб в NodeJS, и у меня есть некоторые проблемы с Authenticate Passport.паспорт всегда возвращает 401, даже он уже вошел в систему, как localStrategy, так и googleStrategy
Прежде всего, я должен сказать, что я искал и повторил попытку аутентификации на обоих сайтах google и stackoverflow около 2 недель, и я не могу решить эту проблему, поэтому благодарим вас за каждый ответ.
Мое приложение на основе стека MEAN с помощью Express.js и Passport для авторизации. И нам нужно авторизоваться в каком-то разделе, и мы разрешили Локальный логин и Google Войти.
После того как я пытался до сих пор, я решить проблему и проблему о санкционировать и последнее, что я не могу понять
Каждый Авторизоваться успех всегда возвращаются 401 на обоих LocalStrategy и GoogleStrategy
И это это мой код.
App
app.use(require('morgan')('dev')); //combined
app.use(require('cookie-parser')());
app.use(require('body-parser').urlencoded({ extended: true }));
app.use(require('body-parser').json());
app.use(require('method-override')('_method'));
app.use(require('express-session')({ secret: config.sessionKey, resave: false, saveUninitialized: false, cookie: { secure: true } }));
app.use(passport.initialize());
app.use(passport.session());
app.use('/', require('./app/config/route'));
Паспорт
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
var config = require('./config');
var User = require('../models/user');
passport.use('local-signup', new LocalStrategy({
usernameField: 'email',
passwordField: 'password',
passReqToCallback: true
},
function(req, email, password, done) {
process.nextTick(function() {
User.findOne({'email': email}, function(err, user) {
if (err) {
mgHooks.sendError(err);
return done(err);
}
if (user) {
return done(null, {status: config.statusText.NotOk, message: config.talkback.usedEmail});
} else {
var newUser = new User();
newUser.email = email;
newUser.name = req.body.name;
newUser.secret = md5(email);
newUser.password = newUser.generateHash(password);
newUser.save(function(err) {
if (err) {
mgHooks.sendError(err)
throw err;
}
return done(null, {
status: config.statusText.Ok,
message: config.talkback.signupSuccess,
user: newUser.id
});
});
}
});
});
})
);
passport.use('local-login', new LocalStrategy({
usernameField: 'email',
passwordField: 'password',
passReqToCallback: true
},
function(req, email, password, done) {
User.findOne({'email': email}, function(err, user) {
if (err) {
mgHooks.sendError(err);
return done(err);
}
if (!user){
return done(null, {status: config.statusText.NotOk, message: config.talkback.invalidLogin});
}
if (!user.validPassword(password)){
return done(null, {status: config.statusText.NotOk, message: config.talkback.invalidLogin});
}
//Valid, then login
var now = new Date();
user.lastVisited = now;
user.save();
return done(null, {
status: config.statusText.Ok,
message: config.talkback.signupSuccess,
user: user.id
});
});
}));
passport.use(new GoogleStrategy({
clientID: config.google.GOOGLE_CLIENT_ID,
clientSecret: config.google.GOOGLE_CLIENT_SECRET,
callbackURL: config.google.CALLBACK_URL
},
function(accessToken, refreshToken, profile, done) {
User.findOrCreate({provider: profile.provider, uid: profile.id}, function (err, user) {
var updateUser = {
name: profile.displayName,
photo: profile.photos[0].value ,
email: profile.emails[0].value,
_raw: profile._raw
};
User.findOneAndUpdate({provider: profile.provider, uid: profile.id}, updateUser, function(err, doc){
if (err) {
console.log(err);
mgHooks.sendError(err);
}
return done(err, user);
});
});
}
));
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(user, done) {
done(null, user);
});
Маршрут
var express = require('express');
var router = express.Router();
var mongoose = require('mongoose');
var passport = require('passport');
//Authorize function
var auth = function(req, res, next){
if (!req.isAuthenticated())
res.send(401);
else
next();
};
router.get('/', function(req, res, next) {
res.render('index');
});
router.use('/api/auth', auth, require('../controllers/api'));
router.get('/auth/loggedin', function(req, res) {
res.send(req.isAuthenticated() ? req.user : 'unauthorized');
});
router.post('/auth/signup', passport.authenticate('local-signup'), function(req, res){
res.send(req.user);
});
router.post('/auth/login', passport.authenticate('local-login'), function(req, res) {
res.send(req.user);
});
router.post('/auth/logout', function(req, res){
req.logOut();
res.send(200);
});
router.get('/auth/google',
passport.authenticate('google', { scope: ['https://www.googleapis.com/auth/plus.login', 'https://www.googleapis.com/auth/plus.profile.emails.read'] })
);
router.get('/auth/google/callback',
passport.authenticate('google', { failureRedirect: '/#!/login' }),
function(req, res) {
// Successful authentication, redirect home.
res.redirect('/#!/profile');
});
Сначала я думаю, что это из-за того, промежуточного ПО, но я старался с каждым учебником, который я нашел, и это не работает.
Пожалуйста, помогите мне разобраться в этом. Большое спасибо!