Я пытаюсь реализовать аутентификацию с помощью Laravel 5.2. Я занимаюсь этим часами, но я всегда получаю «Эти учетные данные не соответствуют нашим записям». при попытке входа в систему.
Я попытался возиться с маршрутами, отрегулировать размер столбца паролей в таблице пользователей, попробовать пользовательский логин и т. Д. Просто не могу заставить его работать.
Вот как я сделал таблицу моих пользователей с помощью миграции:
Заметки:
Код:
DB::statement("CREATE TABLE users( id INT PRIMARY KEY AUTO_INCREMENT, firstname VARCHAR(50) NOT NULL, lastname VARCHAR(50) NOT NULL, password VARCHAR(60) NOT NULL, email VARCHAR(255) UNIQUE NOT NULL, bio VARCHAR(500), gender ENUM('F','M') NOT NULL, birthday DATE NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP updated_at TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, level INT DEFAULT 0, remember_token VARCHAR(100) )");
Вот моя форма для входа:
<form method="POST" action="login"> {!! csrf_field() !!} <table> <tr> <td> <label for="email">E-mail: </label> </td> <td> <input type="email" name="email" value="{{ old('email') }}"> </td> </tr> <tr> <td> <label for="password">Password: </label> </td> <td> <input type="password" name="password" id="password"> </td> </tr> <tr> <td> <label for="remember">Remember me: </label> </td> <td> <input type="checkbox" name="remember"> </td> </tr> </table> <div> <button type="submit">Login</button> </div> </form>
Мои маршруты:
Route::group(['middleware' => ['web']], function () { Route::get('registration', 'MainController@getRegister'); Route::get('login', 'MainController@getLogin'); Route::get('logout', 'Auth\AuthController@logout'); Route::post('registration', 'Auth\AuthController@postRegister'); Route::post('login', 'Auth\AuthController@postLogin'); }); Route::group(['middleware' => ['auth','web']], function () { Route::get('/', 'MainController@getIndex'); });
Класс AuthController
:
class AuthController extends Controller { use AuthenticatesAndRegistersUsers, ThrottlesLogins; /** * Where to redirect users after login / registration. * * @var string */ protected $redirectTo = '/'; protected $loginPath = 'login'; /** * Create a new authentication controller instance. * * @return void */ public function __construct() { $this->middleware('web', ['except' => 'logout']); } /** * Get a validator for an incoming registration request. * * @param array $data * @return \Illuminate\Contracts\Validation\Validator */ protected function validator(array $data) { return Validator::make($data, [ 'firstname' => 'required|max:50', 'lastname' => 'required|max:50', 'email' => 'required|email|max:255|unique:users', 'password' => 'required|confirmed|min:6', 'birthday' => 'required', 'gender' => 'required' ]); } /** * Create a new user instance after a valid registration. * * @param array $data * @return User */ protected function create(array $data) { return User::create([ 'firstname' => $data['firstname'], 'lastname' => $data['lastname'], 'birthday' => $data['birthday'], 'gender' => $data['gender'], 'email' => $data['email'], 'password' => bcrypt($data['password']), ]); } protected function logout(){ if (Auth::check()){ Auth::logout(); } return redirect('login'); } }
изclass AuthController extends Controller { use AuthenticatesAndRegistersUsers, ThrottlesLogins; /** * Where to redirect users after login / registration. * * @var string */ protected $redirectTo = '/'; protected $loginPath = 'login'; /** * Create a new authentication controller instance. * * @return void */ public function __construct() { $this->middleware('web', ['except' => 'logout']); } /** * Get a validator for an incoming registration request. * * @param array $data * @return \Illuminate\Contracts\Validation\Validator */ protected function validator(array $data) { return Validator::make($data, [ 'firstname' => 'required|max:50', 'lastname' => 'required|max:50', 'email' => 'required|email|max:255|unique:users', 'password' => 'required|confirmed|min:6', 'birthday' => 'required', 'gender' => 'required' ]); } /** * Create a new user instance after a valid registration. * * @param array $data * @return User */ protected function create(array $data) { return User::create([ 'firstname' => $data['firstname'], 'lastname' => $data['lastname'], 'birthday' => $data['birthday'], 'gender' => $data['gender'], 'email' => $data['email'], 'password' => bcrypt($data['password']), ]); } protected function logout(){ if (Auth::check()){ Auth::logout(); } return redirect('login'); } }
После беспорядка некоторое время я понял, что ему нужно что-то делать с базой данных. Разумеется, после некоторого тестирования я понял, что столбцы электронной почты и пароля должны выглядеть так:
password CHAR(60) NOT NULL, email VARCHAR(255) character set utf8 collate utf8_bin not null
Я предполагаю, что столбец с паролем был проблемой и что сравнение строк Laravel выполняет не хорошо оценивается с помощью столбцов пароля VARCHAR.