Laravel 5.4 检查用户是不是处于活动状态,如果没有则回复消息
Posted
技术标签:
【中文标题】Laravel 5.4 检查用户是不是处于活动状态,如果没有则回复消息【英文标题】:Laravel 5.4 check if user is active or not and respond with message if notLaravel 5.4 检查用户是否处于活动状态,如果没有则回复消息 【发布时间】:2018-07-21 06:07:33 【问题描述】:我有一个自定义登录控制器, 我需要检查用户是否处于活动状态,如果没有回复消息,例如请先激活您的帐户。
这是我的控制器
public function login( Request $request )
// validate the form data
$this->validate( $request, [
'email' => 'required|email',
'password' => 'required|min:6',
] );
// attempt to login the supplier in
if ( Auth::guard( 'supplier' )->attempt(
[
'email' => $request->email,
'password' => $request->password,
], $request->remember ) )
return redirect()->intended( route( 'supplier-dashboard' ) );
$errors = [ $this->username() => trans( 'auth.failed' ) ];
if ( $request->expectsJson() )
return response()->json( $errors, 422 );
return redirect()->back()
->withInput( $request->only( 'email', 'remember' ) )
->withErrors( $errors );
我可以将active => 1
添加到if ( Auth::guard( 'supplier' )->attempt(
,但这会以错误的用户名或密码进行响应
但我希望它回复“先激活您的帐户”
任何帮助表示赞赏。
【问题讨论】:
【参考方案1】:我不完全确定您要做什么,但您似乎只是在尝试自定义验证消息。在 laravel 5.4 中,您可以自定义用户看到的错误消息,例如 here。
You may customize the error messages used by the form request by overriding the messages method. This method should return an array of attribute / rule pairs and their corresponding error messages:
你应该能够做类似的事情
public function messages()
return [
'email.required' => 'Active your account first',
'password.required' => 'Active your account first',
];
但更好的方法是使用 Laravel flash messaging。基本上你会像这样设置一个键和消息:
$request->session()->flash('message', 'Active your account first');
然后要在视图中显示消息,您只需执行以下操作:
@if (Session::has('message'))
<p>!! session('message') !!</p>
@endif
【讨论】:
不,我没有尝试更改或翻译消息,我正在尝试检查用户是否处于活动状态,如果他不活动,请给他消息Your account is not active
【参考方案2】:
...
if ( Auth::guard( 'supplier' )->attempt(
[
'email' => $request->email,
'password' => $request->password,
], $request->remember ) )
if(!Auth::user()->active)
Auth::logout();
$errors = ['active' => 'Please activate your account'];
else
return redirect()->intended( route( 'supplier-dashboard' ) );
else
$errors = [ $this->username() => trans( 'auth.failed' ) ];
...
【讨论】:
很抱歉,它只是让用户登录并忽略了这一行。 它忽略了if(!Auth::user()->active)
行?
是的!我也尝试这种方式if(!Auth::guard( 'supplier' )->active) Auth::logout(); $errors = ['active' => 'Please activate your account'];
但$error
无法访问它返回的用户名或密码不正确
好吧,如果它带有该消息,那么您的 if ( Auth::guard( 'supplier' )->attempt
将失败,因为它从 else 获取 $error
所以你的意思是,即使数据库中不存在该用户名和密码的用户,你仍然想返回Your account is not active
?以上是关于Laravel 5.4 检查用户是不是处于活动状态,如果没有则回复消息的主要内容,如果未能解决你的问题,请参考以下文章
如何检查 Google Play 订阅是不是在客户端或服务器端处于活动状态
检查 Android 中的 *** 连接是不是处于活动状态?