Laravel 5.4,当用户不活跃时显示验证登录错误消息

2023-12-31

我的重点是,如果用户尝试使用有效凭据登录但其状态字段为 0(非活动),则向用户显示一条名为“您处于非活动状态或尚未激活”的错误消息。

如果用户的状态为非活动状态,我可以通过 LoginController 中的以下函数将用户重定向到登录页面。

protected function credentials(\Illuminate\Http\Request $request) {
    return ['email' => $request->{$this->username()}, 'password' => $request->password, 'status' => 1];

        }

我怎样才能在 Laravel 5.4 中实现这一点?

任何指南对我都有帮助。提前致谢。


您可以尝试修改 LoginController.php 中的 sendFailedLoginResponse 函数

路径:app\Http\Controllers\LoginController

记得导入 Illuminate\Http\Request 和 App\User(这里是 App\Models\User 因为我将 User 模型移到了 App\Models);

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use App\Models\User;


class LoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */

    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = '/home';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }

    protected function credentials(Request $request) {
      return array_merge($request->only($this->username(), 'password'), ['active' => 1]);
    }

    /**
     * Get the failed login response instance.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\RedirectResponse
     */
    protected function sendFailedLoginResponse(Request $request)
    {
        $errors = [$this->username() => trans('auth.failed')];

        // Load user from database
        $user = User::where($this->username(), $request->{$this->username()})->first();

        // Check if user was successfully loaded, that the password matches
        // and active is not 1. If so, override the default error message.
        if ($user && \Hash::check($request->password, $user->password) && $user->active != 1) {
            $errors = [$this->username() => trans('auth.notactivated')];
        }

        if ($request->expectsJson()) {
            return response()->json($errors, 422);
        }
        return redirect()->back()
            ->withInput($request->only($this->username(), 'remember'))
            ->withErrors($errors);
    }
}

顺便说一下,我在 resources\lang\en\auth.php 中添加了一行,这样我就可以使用 trans('auth.notactivated') 作为我的错误消息。

<?php

return [
    'failed' => 'These credentials do not match our records.',
    'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
    'notactivated' => 'This account has not been activated yet.',
];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Laravel 5.4,当用户不活跃时显示验证登录错误消息 的相关文章

随机推荐