用户确认,使用用户名和电子邮件登录

时间:2018-07-16 13:21:48

标签: laravel login message

我稍微更改了登录功能,即用户只有通过已发送电子邮件确认其电子邮件地址时,才能使用其用户名和电子邮件登录。

我想做什么

  1. 如果尚未确认电子邮件地址,我想将用户重定向到页面以确认其电子邮件地址。如果表“用户,活动”的表为1,则地址已确认。

  2. 当前我在使用用户名登录时遇到问题。有人认错了吗?

我该如何实施?有人有类似的代码吗?

/**
    * Get the needed authorization credentials from the request.
    *
    * @param  \Illuminate\Http\Request  $request
    * @return array
    */
   protected function credentials(Request $request)
   {
       $field = filter_var($request->get($this->username()), FILTER_VALIDATE_EMAIL)
           ? $this->username()
           : 'username';

       return [
           $field => $request->get($this->username()),
           'password' => $request->password,
       ];
   }

    /**
     * Validate the user login request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return void
     */
    protected function validateLogin(Request $request)
    {
        $this->validate($request, [
            $this->username() => [
                'required', 'string',
                Rule::exists('users')->where(function ($query){
                    $query->where('active', true);
                })
            ],
            'password' => 'required|string',
        ], $this->validationError());
    }

新的loginController

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 = '/iboard';

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

    /**
    * Get the needed authorization credentials from the request.
    *
    * @param  \Illuminate\Http\Request  $request
    * @return array
    */
   protected function credentials(Request $request)
   {

       $field = filter_var($request->get($this->username()), FILTER_VALIDATE_EMAIL)
           ? $this->username()
           : 'username';

       return [
           $field => $request->get($this->username()),
           'password' => $request->password,

       ];

   }

公共功能登录(请求$ request)     {         $ this-> validateLogin($ request);

    if (Auth::once($this->credentials($request))) {  //use auth once so that it will not create auth session
        $user = Auth::user();

        if($user->active){
            Auth::login($user); //now create auth session, check
            return redirect('/iboard'); //redirect to dashboard url
        }else{
            return redirect('email_confirm')->with('fail', 'Please confirm your email'); //redirect to email confirm page
        }
    }

    return redirect()->back()->with('fail', "Invalid username or password");
}

    public function userLogout()
    {
        Auth::guard('')->logout();
        return view('/exit');
    }
}

1 个答案:

答案 0 :(得分:1)

假设您在同一控制器中具有validateLogincredentials功能,则可以尝试以下代码进行登录,因为以下登录操作同时使用了这两个功能。查看详细信息here

public function login(Request $request)
{
    $this->validateLogin($request);

    if (Auth::once($this->credentials($request))) {  //use auth once so that it will not create auth session
        $user = Auth::user();

        if($user->active == 1){
            Auth::login($user); //now create auth session
            return redirect('dashboard'); //redirect to dashboard url
        }else{
            return redirect('email_confirm')->with('error', 'Please confirm your email'); //redirect to email confirm page
        }
    }

     return redirect()->back()->with('error', "Invalid username or password"); 
}