Просмотр исходного кода

Ensure to be able to login with both of username or email

Yuki Takei 8 лет назад
Родитель
Сommit
f503cd302d
4 измененных файлов с 18 добавлено и 7 удалено
  1. 4 4
      lib/crowi/index.js
  2. 1 1
      lib/form/login.js
  3. 11 0
      lib/models/user.js
  4. 2 2
      lib/views/login.html

+ 4 - 4
lib/crowi/index.js

@@ -259,14 +259,14 @@ Crowi.prototype.setupPassport = function() {
 
   passport.use(new LocalStrategy(
     {
-      usernameField: 'loginForm[email]',
+      usernameField: 'loginForm[username]',
       passwordField: 'loginForm[password]'
     },
     function(username, password, done) {
-      User.findUserByEmailAndPassword(username, password, function(err, user) {
+      User.findUserByUsernameOrEmail(username, password, function(err, user) {
         if (err) { return done(err); }
-        if (!user) {
-          return done(null, false, { message: 'Incorrect username.' });
+        if (!user || !user.isPasswordValid(password)) {
+          return done(null, false, { message: 'Incorrect credentials.' });
         }
         return done(null, user);
       });

+ 1 - 1
lib/form/login.js

@@ -4,6 +4,6 @@ var form = require('express-form')
   , field = form.field;
 
 module.exports = form(
-  field('loginForm.email').required(),
+  field('loginForm.username').required(),
   field('loginForm.password').required().is(/^[\x20-\x7F]{6,}$/)
 );

+ 11 - 0
lib/models/user.js

@@ -465,6 +465,17 @@ module.exports = function(crowi) {
     });
   };
 
+  userSchema.statics.findUserByUsernameOrEmail = function(usernameOrEmail, password, callback) {
+    this.findOne()
+      .or([
+        {username: usernameOrEmail},
+        {email: usernameOrEmail},
+      ])
+      .exec((err, userData) => {
+        callback(err, userData);
+      });
+  };
+
   userSchema.statics.findUserByEmailAndPassword = function(email, password, callback) {
     var hashedPassword = generatePassword(password);
     this.findOne({email: email, password: hashedPassword}, function (err, userData) {

+ 2 - 2
lib/views/login.html

@@ -40,8 +40,8 @@
     </div>
     <form role="form" action="/login" method="post">
       <div class="input-group">
-        <span class="input-group-addon"><i class="fa fa-envelope"></i></span>
-        <input type="text" class="form-control" placeholder="E-mail" name="loginForm[email]">
+        <span class="input-group-addon"><i class="fa fa-user"></i></span>
+        <input type="text" class="form-control" placeholder="Username or E-mail" name="loginForm[username]">
       </div>
 
       <div class="input-group">