Laravel 5 Auth活跃会员

时间:2016-06-11 22:32:07

标签: php laravel authentication laravel-5

有几个类似的问题,但所有这些问题似乎都不完整,因为它们指的是不存在的功能。

我指的是:

Check for active user state with laravel

Login only if user is active using Laravel

extend laravel 5 built-in authentication to login only "if user == active"

在所有这些中,提出的解决方案主要是改变AuthController中的函数,但这些函数不存在。

我使用的是最新版本的Laravel(5.2),因此我提到的默认文件如下:https://github.com/laravel/laravel/blob/master/app/Http/Controllers/Auth/AuthController.php

现在,我该如何实现此功能?我已尝试将public function postLogin()(如其他提及的帖子中所示)复制到AuthController文件中。没有改变。

我显然在这里遗漏了一些东西。

请有人帮忙!

编辑: 我添加的功能是:

public function postLogin(Request $request)
{
$this->validate($request, [
    'email' => 'required|email', 'password' => 'required',
]);

$credentials = $this->getCredentials($request);

// This section is the only change
if (Auth::validate($credentials)) {
    $user = Auth::getLastAttempted();
    if ($user->active) {
        Auth::login($user, $request->has('remember'));
        return redirect()->intended($this->redirectPath());
    } else {
        return redirect($this->loginPath()) // Change this to redirect elsewhere
            ->withInput($request->only('email', 'remember'))
            ->withErrors([
                'active' => 'You must be active to login.'
            ]);
    }
}

return redirect($this->loginPath())
    ->withInput($request->only('email', 'remember'))
    ->withErrors([
        'email' => $this->getFailedLoginMessage(),
    ]);

}

2 个答案:

答案 0 :(得分:1)

AuthController中的大多数功能都是使用traits添加的。请注意课程开头的这一行:

use AuthenticatesAndRegistersUsers, ThrottlesLogins;

如果查看AuthenticatesAndRegistersUsers,您会发现它确实有postLogin方法。

为什么实现此方法不起作用:我认为您缺少方法签名中的$request参数。

如果不是这样,请在问题中添加更大的代码段。

编辑:为将来的调试:php artisan route:list为您提供了哪些路由调用哪些方法的列表。这可以为您提供覆盖哪种方法的提示。

答案 1 :(得分:0)

因此,对于在gridview rowdatabound提供的身份验证的Laravel 5.2上遇到相同问题的每个人。

首先要了解php artisan make:auth指向Route::auth();功能,而不是login(谢谢@lagbox!)

然后您必须更新postLogin

在文件顶部添加:

AuthController

use Auth; use Illuminate\Http\Request; 之后添加地点:

use AuthenticatesAndRegistersUsers, ThrottlesLogins;

更新的/** * Where to redirect users if login is unsuccessufull. * * @var string */ protected $loginPath = '/login';` 功能:

login

然后应更新public function login(Request $request) { $this->validate($request, [ 'email' => 'required|email', 'password' => 'required', ]); $credentials = $this->getCredentials($request); // This section is the only change if (Auth::validate($credentials)) { $user = Auth::getLastAttempted(); if ($user->active) { Auth::login($user, $request->has('remember')); return redirect()->intended($this->redirectPath()); } else { return redirect($this->loginPath) // Change this to redirect elsewhere ->withInput($request->only('email', 'remember')) ->withErrors([ 'active' => 'You must be active to login.' ]); } } return redirect($this->loginPath) ->withInput($request->only('email', 'remember')) ->withErrors([ 'email' => $this->getFailedLoginMessage(), ]); } 以显示新错误login.blade.php

谢谢你们的帮助!