Я не могу войти в систему с помощью Auth::попытка php laravel

#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'));