簡體   English   中英

Laravel 5.4,當用戶不活躍時顯示錯誤消息身份驗證登錄

[英]Laravel 5.4, show error message auth login when user not active

我使用默認身份驗證構建身份驗證過程laravel 5.4,我的計划是在登錄之前要檢查一些其他條件“必須激活用戶電子郵件”,

我試圖像這樣將方法attempLogin覆蓋到我的LoginController

protected function attemptLogin(Request $request)
{                
    $qLogin = [
        'user_email'        => $this->credentials($request)[$this->username()],
        'password'          => $this->credentials($request)[$this->password()],
        'active'            => 1
    ];        


    return $this->guard()->attempt(
        $qLogin, $request->has('remember')
    );
}

該代碼可以按照我的意願進行驗證,但是我想顯示一些錯誤消息,告訴用戶,如果他們要登錄,他/她必須激活/驗證他們的電子郵件

對不起,我是laravel的新用戶,您的幫助會很棒

您可以添加憑據功能來檢查用戶是否被激活。 而且,您可以修改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.noactive')];
        }

        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.',
];

@ jack59074不錯的一個功能“ sendFailedLoginResponse”功能需要按以下方式進行重組。

  protected function sendFailedLoginResponse(Request $request) { // Load user from database $user = User::where($this->username(), $request->{$this->username()})->first(); //dd($user); // 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->status != 1) { $errors = [$this->username() => trans('auth.noactive')]; } if ($request->expectsJson()) { return response()->json($errors, 422); } return redirect()->back() ->withInput($request->only($this->username(), 'remember')) ->withErrors($errors); throw ValidationException::withMessages([ $this->username() => [trans('auth.failed')], ]); } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM