Локальный аттестат аттестата плюс местный паспорт мангуста не принимают электронную почту в качестве имени пользователя - PullRequest
0 голосов
/ 28 мая 2018

Я использую стратегию passport local и passport mongoose local для создания пользователя и проверки аутентификации пользователя.Однако я хотел изучить возможность использования электронной почты вместо имени пользователя.Я следовал тому, что говорится в документе, и я становлюсь несанкционированным.Может кто-нибудь сказать мне, почему я получаю ошибку, и это работает, если я просто использую имя пользователя в качестве логина.

From passport-local-mongoose Примечание: usernameField: указывает имя поля, которое содержит имя пользователя.По умолчанию используется имя пользователя.Эту опцию можно использовать, если вы хотите использовать другое поле для хранения имени пользователя, например «email».

И из стратегии локального паспорта По умолчанию LocalStrategy ожидает найти учетные данные в параметрах с именами username и password.Если ваш сайт предпочитает называть эти поля по-разному, доступны варианты для изменения значений по умолчанию.

Я попытался установить оба значения true одновременно, а также попытался отключить одно значение true и другое.Я получу ту же ошибку

Экспресс 4.16.0 Экспресс-сессия 1.15.6 Мангуст 5.1.2 Паспорт 0.40 Паспорт Локальный 1.0.0 Паспорт Локальный Мангуст 5.0.0

passport.js

module.exports = function (passport, LocalStrategy, User) {
    passport.use(new LocalStrategy({
        usernameField: 'email',
        passwordField: 'password',
        passReqToCallback: true,
        session: true
      },
      function(req, username, password, done) {
        return done(null, req.user);
      }
    ));
    passport.serializeUser(User.serializeUser());
    passport.deserializeUser(User.deserializeUser());
};

модель / User.js

var UserSchema = new mongoose.Schema({
    name: { type: String, required: true, default: ''},
    username: { type: String, unique: true, uniqueCaseInsensitive: true, required: true, default: ''},
    email: { type: String, required: true, unique: true, uniqueCaseInsensitive: true, default: ''},
    profileImage:{ type: String, default: ''},
    timestamp: {type: String, default: () => moment().format("dddd, MMMM Do YYYY, h:mm:ss a") }
});

UserSchema.plugin(passportLocalMongoose, {usernameField: 'email'});
UserSchema.plugin(uniqueValidator);

module.exports = mongoose.model('UserSchema', UserSchema);

signinForm.js

<form class="form-signin" action="/users/signup" method="POST" enctype='multipart/form-data'>
    <h1 class="h3 mb-3 font-weight-normal">Please sign up</h1>
    <label for="inputName" class="sr-only">Name</label>
    <input type="bane" id="inputName" class="form-control" placeholder="Name" name='name' required autofocus />

    <label for="inputUsername" class="sr-only">Username</label>
    <input type="bane" id="inputUsername" class="form-control" placeholder="Username" name='username' required autofocus />

    <label for="inputEmail" class="sr-only">Email</label>
    <input type="email" id="inputEmail" class="form-control" placeholder="Email" name='email' required autofocus />

    <label for="inputPassword" class="sr-only">Password</label>
    <input type="password" id="inputPassword" class="form-control" placeholder="Password" name='password' required autofocus/>  

    <label for="inputConfirmPassword" class="sr-only">Confirm Password</label>
    <input type="password" id="inputConfirmPassword" class="form-control" placeholder="Confirm Password" name='confirmPassword' required autofocus/>  

    <input type='file' class='form-control' id='inputFile' name='profileImage' />
    <div style="height: 10px"></div>
    <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
    <p class="mt-5 mb-3 text-muted">&copy; 2017-2018</p>
</form>

маршруты / пользователи.js

router.post('/signup', upload.single('profileImage'), function(req, res, next) {

  const name = req.body.name;
  const email = req.body.email;
  const password = req.body.password;
  const confirmPassword = req.body.confirmPassword;

  if (req.file) {
    console.log('Uploading File...');
    var profileImage = req.file.filename;
  } else {
    console.log('No File Uploaded... Setting to no image');
    var profileImage = 'noimage.jpg';
  }

  UserController.createUser(req.body, function(err, user) {
    if (err) {
      res.json({
        err: err
      });
      return;
    }
    passport.authenticate('local')(req, res, function() {
      //res.render('index', {currentUser: user, title: 'Product Page' });
      res.redirect('/');
      return;
     });
    return;
  })
});

Я закончилавторизация и 401

Заранее спасибо.

enter image description here enter image description here

1 Ответ

0 голосов
/ 28 мая 2018

Попробуйте удалить 'return' в конце UserController.createUser (), вам нужно дождаться результата passport.authenticate ()

...