#php #laravel
Вопрос:
Я получаю данные из формы входа в систему, но по какой-то причине она не авторизована. Данные правильно сохраняются в базе данных. Я новичок в laravel и совсем не понимаю, почему это происходит, но я хочу знать. login.blade.php
<?php
namespace AppHttpControllers;
use AppHttpControllersController;
use IlluminateHttpRequest;
use IlluminateSupportFacadesAuth;
class LoginController extends Controller
{
public function login(Request $request){
if(Auth::check()){
return redirect(route('user.private'));
}
$formFields = $request->only(['email','password']);
if (Auth::attempt($formFields)){
return redirect(route('user.private'));
}
return redirect(route('user.login'))->withErrors([
'email' => 'Bad'
]);
}
}
LoginController.php:
<?php
namespace AppHttpControllers;
use AppHttpControllersController;
use IlluminateHttpRequest;
use IlluminateSupportFacadesAuth;
class LoginController extends Controller
{
public function login(Request $request){
if(Auth::check()){
return redirect(route('user.private'));
}
$formFields = $request->only(['email','password']);
if (Auth::attempt($formFields)){
return redirect(route('user.private'));
}
return redirect(route('user.login'))->withErrors([
'email' => 'Bad'
]);
}
}
web.php:
<?php
Route::name('user.')->group(function (){
Route::view('/private','private')->middleware('auth')->name('private');
Route::get('/login',function(){
if(Auth::check()){
return redirect(route('user.private'));
}
// Проверка на авторизацию пользователя. Если уже авторизован, то редирект на страницу профиля
return view('login');
})->name('login');
Route::post('/login',[AppHttpControllersLoginController::class,'login']);
Route::get('/logout',function(){
Auth::logout();
return redirect('/');
})->name('logout');
Route::get('/registration', function () {
if(Auth::check()){
return redirect(route('user.private'));
}
return view('registration');
})->name('registration');
Route::post('/registration',[AppHttpControllersRegisterController::class,'save']);
});
Из базы
данных введите описание изображения здесь
При запуске/входе в систему
введите описание изображения здесь
Ответ №1:
Взгляните на документацию Laravel для этого, похоже, ваш код немного отличается: https://laravel.com/docs/8.x/authentication#authenticating-users
В качестве примечания по очистке я бы удалил аутентификацию::проверьте свой web.php поскольку вы уже включили его в свой контроллер входа в систему.
Комментарии:
1. Пароль в базе данных не хэшируется
2. Не работает. Это тот же код, но с проверкой
3. Я могу хэшировать пароль с помощью этого « общедоступная функция setPasswordAttribute($password){ $this->атрибуты[‘пароль’] = Хэш::сделать($пароль); } « Но это не работает
Ответ №2:
Значение поля пароля в базе данных не может быть четким, его необходимо зашифровать.
Добрался до консоли и запустил php artisan tinker
, затем поместил результат bcrypt в качестве значения поля
User::where('email','test1234@test')->update(['password' => bcrypt('test')]);
Теперь вы можете войти в систему с test1234@test
помощью электронной почты и test
пароля
Комментарии:
1. Я уже пытаюсь хэшировать пароль с помощью « public function setPasswordAttribute($password){ $this->атрибуты[‘пароль’] = Хэш::сделать($пароль); }« в User.php, но это же не работает
2. @ДмитрийГвоздиенко используйте bcrypt или отрегулируйте хэш до 12 раундов laravel.com/docs/8.x/hashing#adjusting-the-bcrypt-work-factor поймите, что
Auth::attempt()
это так просто в laravel, что это не может быть ошибкой. единственная оставшаяся возможная проблема-это ваши данные. либо база данных, либо данные запроса
Ответ №3:
Пароль должен был быть хэширован через bcrypt
:
class User extends Model {
public function setPasswordAttribute($value) {
$this->attributes['password'] = bcrypt($value);
}
}
Так что вы можете использовать simpy
Auth::attempt(array('email' => 'test1234@test', 'password' => 'test'));