如何在自定义login()函数中验证用户?

时间:2018-04-12 04:12:48

标签: php laravel

我在login()中覆盖了LoginController方法。

这是我的方法:

public function login(Request $request)
{
    $user = User::where('email', $request->email)->get()->first();
    if(!$user) {
        Session::flash('user.login', 'Пользователь не найден.');  
        return redirect()->route('login');          
    }

    if($user->active === 0) {
        Session::flash('user.login', 'Пользователь деактивирован.');
        return redirect()->route('login');
    }

    $credentials = $request->only('email', 'password');

    if(Auth::attempt($credentials)) {
        // Auth::login($user, true);
        return redirect()->intended('dashboard');
    } else {
        Session::flash('user.login', 'Неверный пароль.');
        return redirect()->route('login');
    }   
}

但是当用户身份验证通过时,我会收到401错误,这意味着Unauthenticated

我在auth的构造函数中设置了UserController的中间件。

public function __construct()
{
    $this->middleware('auth');
}

Unauthenticated错误的原因是什么?

编辑:

routes/web.php档案

Auth::routes();

Route::get('/', 'HomeController@index')->name('dashboard');

Route::middleware('auth')->group(function() {
    Route::middleware('role:superadministrator|administrator')->group(function() {
        Route::get('acl', 'AclController@index')->name('acl.index');
        Route::post('permissions', 'PermissionController@store')->name('permissions.store');
        Route::put('roles', 'RoleController@update')->name('roles.update');
        Route::post('roles', 'RoleController@store')->name('roles.store');

        Route::resource('users', 'UserController');
        Route::put('users/password', 'UserController@changePassword')->name('password.change');
    });
});

1 个答案:

答案 0 :(得分:0)

Do something like this:

public function __construct()
{
    $this->middleware('guest')->except('logout');
}

$user = User::where('email', $request->email)->first(); 
//without get() to get record

$credentials = $request->only('email', 'password');

    if(Auth::attempt($credentials)) {
         // Authentication passed...
        // Auth::login($user, true);
        Session::put( 'name', $request->get ( 'username' ) );
        Session::flash('user.login', 'Logged in');
        return redirect()->intended('dashboard');
    } else {
        Session::flash('user.login', 'Неверный пароль.');
        return redirect()->route('login');
    }