有几个类似的问题,但所有这些问题似乎都不完整,因为它们指的是不存在的功能。
我指的是:
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(),
]);
}
答案 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
谢谢你们的帮助!