我无法使用 Auth::attempt php laravel 登录

问题描述

我从登录表单收到数据,但由于某种原因它没有被授权。数据正确保存到数据库中。我是 laravel 的新手,我完全不明白为什么会发生这种情况,但我想知道。 登录.blade.PHP

<?PHP

namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

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

    }
}

登录控制器.PHP

<?PHP

namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

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',[\App\Http\Controllers\LoginController::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',[\App\Http\Controllers\RegisterController::class,'save']);
});

来自数据库 enter image description here 从启动/登录 enter image description here

解决方法

看一下 Laravel 的文档,看起来你的代码有点不同:https://laravel.com/docs/8.x/authentication#authenticating-users

作为清理说明,我会删除 web.php 中的 Auth::check,因为您已将其包含在登录控制器中。

,

数据库中的密码字段值不能明确,需要bcrypt。

到控制台运行php artisan tinker然后把bcrypt的结果作为字段的值

User::where('email','test1234@test')->update(['password' => bcrypt('test')]);

现在您可以使用 test1234@test 作为电子邮件和 test 作为密码登录

,

密码必须通过 bcrypt 散列:

class User extends Model {

    public function setPasswordAttribute($value) {
         $this->attributes['password'] = bcrypt($value);
    }

}

所以你可以使用 simpy

Auth::attempt(array('email' => 'test1234@test','password' => 'test'));

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...