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()-&gt;active) 行? 是的!我也尝试这种方式if(!Auth::guard( 'supplier' )-&gt;active) Auth::logout(); $errors = ['active' =&gt; 'Please activate your account']; $error 无法访问它返回的用户名或密码不正确 好吧,如果它带有该消息,那么您的 if ( Auth::guard( 'supplier' )-&gt;attempt 将失败,因为它从 else 获取 $error 所以你的意思是,即使数据库中不存在该用户名和密码的用户,你仍然想返回Your account is not active

以上是关于Laravel 5.4 检查用户是不是处于活动状态,如果没有则回复消息的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 检查帐户是不是处于活动状态

检查窗口是不是处于活动状态

如何检查 Google Play 订阅是不是在客户端或服务器端处于活动状态

检查 Android 中的 *** 连接是不是处于活动状态?

检查 Android 中的 *** 连接是不是处于活动状态并显示消息? [复制]

仅当用户在 Laravel 5.7 中处于活动状态时才登录用户