Неизвестная стратегия аутентификации "github" - PullRequest
0 голосов
/ 05 ноября 2018

Онлайн-аутентификация GitHub не работает. Я зарегистрировал новое приложение в GitHub, и все же оно не будет перенаправлено на OAuth.

Следующий код, который я написал и получил Ошибка: Неизвестная стратегия аутентификации "github"

const passport      = require('passport');
const bcrypt        = require('bcrypt');

module.exports = function (app, db) {

    app.route('/')
      .get((req, res) => { 
        res.render(process.cwd()+'/views/pug/index', {title: 'Hello', message: 'Please login',showLogin: true, showRegistration: true});
      });


    app.route('/login')
      .post(passport.authenticate('local',{ failureRedirect: '/' }),(req,res)=>{
         res.redirect('/profile');
      });

    function ensureAuthenticated(req, res, next) {
      if (req.isAuthenticated()) {
        return next();
      }
      res.redirect('/');
     }

    app.route('/profile')
      .get(ensureAuthenticated, (req,res) => {
         res.render(process.cwd() + '/views/pug/profile',{username:req.user.username});
      });

    app.route('/logout')
      .get((req, res) => {
        req.logout();
        res.redirect('/');
      });


    app.route('/register')
     .post((req, res, next) => {
        var hash = bcrypt.hashSync(req.body.password, 12);
        db.collection('users').findOne({ username: req.body.username }, function (err, user) {
          if(err) {
              next(err);
          } else if (user) {
              res.redirect('/');
          } else {
              db.collection('users').insertOne(
                {username: req.body.username,
                 password: hash},
                (err, doc) => {
                    if(err) {
                        res.redirect('/');
                    } else {
                        next(null, user);
                    }
                }
              )
          }
      })},
    passport.authenticate('local', { failureRedirect: '/' }),
    (req, res, next) => {
        res.redirect('/profile');
    }
    );

  /*GitHub OAuth*/

  app.route('/auth/github')
    .get(passport.authenticate('github'));

   app.route('/auth/github/callback')
    .get(passport.authenticate('github', { failureRedirect: '/' }), (req,res) => { 
    res.redirect('/profile'); 
  });

  /*End of GitHub OAuth*/

  app.use((req, res, next) => {
    res.status(404)
      .type('text')
      .send('Not Found');
  });
}

Кажется, я что-то упустил или что-то еще для OAuth. Стратегия не была определена на моей стороне. Я просто получаю доступ к стратегии по умолчанию для GitHub.

1 Ответ

0 голосов
/ 05 ноября 2018

Вы должны настроить стратегию паспортного github в вашем скрипте. https://github.com/jaredhanson/passport-github var GitHubStrategy = require ('passport-github'). Strategy;

passport.use(new GitHubStrategy({
    clientID: GITHUB_CLIENT_ID,
    clientSecret: GITHUB_CLIENT_SECRET,
    callbackURL: "http://127.0.0.1:3000/auth/github/callback"
  },
  function(accessToken, refreshToken, profile, cb) {
    User.findOrCreate({ githubId: profile.id }, function (err, user) {
      return cb(err, user);
    });
  }
));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...