Я пытаюсь выполнить базовую проверку подлинности и когда пытаюсь выполнить аутентификацию пользователя, но метод Auth :: attempt
try возвращает false
лопасть
{{ Form::open(array('url' => 'usuario')) }} <input type="text" class="text" id="email" name="email" placeholder="Correo" {{(Input::old('email')) ? 'value ="'. Input::old('email').'"' : '' }}> <p>{{ $errors->first('email') }}</p> <input type="text" class="text" id="password" name="password" placeholder="Contraseña" > <p>{{ $errors->first('password') }}</p> {{ Form::submit('Ingresar', array('class' => 'bg1')) }} {{ Form::close() }}
контроллер
class UsuarioController extends BaseController{ public function doLogin(){ $rules = array( 'email' => 'required|email', 'password' => 'required' ); $validator = Validator::make(Input::all(), $rules); if($validator->fails()){ return Redirect::to('usuario')->withErrors($validator)->withInput(Input::except('password')); }else{ $userdata = array( 'email' => Input::get('email'), 'password' => Input::get('password') ); if(Auth::attempt($userdata)){ return View::make('hello'); }else{ return Redirect::to('usuario'); } } } }
Auth
'driver' => 'database', 'model' => 'Usuario', 'table' => 'Usuario',
Модель
use Illuminate\Auth\UserInterface; use Illuminate\Auth\Reminders\RemindableInterface; class Usuario extends Eloquent implements UserInterface, RemindableInterface{ protected $table = 'Usuario'; protected $primaryKey = 'idUsuario'; protected $hidden = array('Contrasena'); protected $fillable = array( 'Nombre', 'Apellido', 'Tipo', 'password', 'email', 'Fono', 'Foto' ); }
Код всегда возвращает false и перенаправляет меня на вход в систему, используя неверные данные, когда база данных
Есть много причин, которые могут заставить его возвращать false каждый раз:
1) Ваш пароль неправильно сохранен / хеширован, вы должны сделать его с помощью:
Hash::make($password);
Это способ создания пользователей и хранения правильных хэшей паролей от Laravel:
$user = new User; $user->email = 'example@domain.com'; $user->password = Hash::make('thePasswordToBeHashed'); $user->save();
2) Размер столбца в вашем пароле не достаточен для хранения хешированного пароля. Он должен иметь длину не менее 60 байт, но с его помощью:
$table->string('password');
Является хорошей практикой, потому что, если этот размер как-то изменится в будущем, у вас не будет проблем.
3) У вас нет пользователя с адресом электронной почты (Correo), который вы пытаетесь войти в систему. Дважды проверьте это, потому что это происходит чаще, чем мы думаем. И вы также можете попытаться сделать это вручную, чтобы увидеть, действительно ли это работает:
$userdata = array( 'Correo' => 'youremail@domain.com', 'Password' => 'password' ); dd( Auth::attempt($userdata) );
4) Данные не будут правильно переданы вашей формой, проверьте, действительно ли ваша форма работает, путем ее смерти:
dd(Input::all());
И проверьте, получили ли вы правильные данные.
5) У вас есть валидация, поэтому проблема может быть на ней. Добавьте еще одно сообщение о смерти:
if($validator->fails()) { dd('Validation is failing!'); ... }
6) Из комментария:
$userData = array('email' => Input::get('email'), 'password' => Input::get('password')); return (string) Auth::attempt($userData));
7) Попробуйте создать другого пользователя вручную:
$user = new User; $user->email = 'example@domain.com'; $user->password = Hash::make('passwordExample'); $user->save();
И войдите в систему:
$userData = array('email' => 'example@domain.com', 'password' => 'passwordExample'); return (string) Auth::attempt($userData));