亚宇博客

Laravel 自定义用户登录注册功能

发布时间:2019-08-30 16:42作者:亚宇热度: 3006 ℃评论数: 888

在 config/auth.php 中将 providers 改为如下

'providers' => [        
    'users' => [            
        'driver' => 'eloquent',            
        'model' => App\Models\User::class,
     ],
                
     // 'users' => [        
     //     'driver' => 'database',        
     //     'table' => 'users',        
     // ],
    ],
2. 相关路由
/*
 |---------------------------------------
 |用户登录注册
 |---------------------------------------
 */Route::namespace('User')->group(function () {    // 注册
    Route::get('go-to-register', 'UserController@goToRegister')->name('register.index');
    Route::post('register', 'UserController@register')->name('user.register');    // 登陆页面
    Route::get('go-to-login', 'UserController@goToLogin')->name('login.index');
    Route::post('login', 'UserController@login')->name('user.login');    // 退出登陆
    Route::get('loginout', 'UserController@loginOut')->name('user.loginout');    // 获取登陆用户信息
    Route::get('profile', 'UserController@userInfo')->name('user.info')->middleware('checkauth');

});
3. 注册代码
/*
     * 注册
     */
    public function goToRegister()
    {        
        return view('user.register');
    }    
    
    public function register(Request $request)
    {        
        try{            
            // 规则
         $rules = [            
            'name' => 'required|max:10',                'email' => 'required|email',                'password' => 'required'
         ];          
         // 自定义消息
         $messages = [
           'name.required' => '请输入用户名',                'name.max' => '用户名的长度不能超过10个字符',                'email.required' => '请输入邮箱',                'email.email' => '请输入正确的邮箱格式',                'password.required' => '请输入密码'
         ];           
         $this->validate($request, $rules, $messages);

         $name = $request->input('name');
         $email = $request->input('email');
         $password = $request->input('password');

         $user = new User();
         $user->name = $name;
         $user->email = $email;
         $user->password = bcrypt($password);
         $user->save();

         \Auth::login($user); // 注册的用户让其进行登陆状态

         return redirect()->route('user.info');
        } catch (ValidationException $validationException) {
          $message = $validationException->validator->getMessageBag()->first();            return $message;
        }
    }
4. 登陆代码
/*
     * 登陆
     */
    public function goToLogin()
    {     
       return view('user.login');
     }    
     
     public function login(Request $request)
    {       
     // 规则
        $rules = [    
            'email' => 'required|email',            'password' => 'required'
        ];
        \Auth::logout();  
              
        // 自定义消息
        $messages = [     
           'email.required' => '请输入邮箱',            'email.email' => '请输入正确的邮箱格式',            'password.required' => '请输入密码'
        ];        
        $this->validate($request, $rules, $messages);

        $email = $request->input('email');
        $password = $request->input('password');        if (!\Auth::attempt(['email' => $email, 'password' => $password])) {            return ['msg' => '登陆失败'];
       }       
       return redirect()->route('user.info');
    }
5. 验证是否登陆通过中间件来实现
  • CheckAuth 类就是验证是否登陆的中间件类

json(['msg' => '没登录']);            // 返回登陆界面
       // return redirect()->route('login.index');
        }        return $next($request);
    }
}

然后在Kernel.php的 $routeMiddleware数组中添加以下即可

'checkauth' => CheckAuth::class,

一条展示用户信息的路由就包含验证中间件

// 获取登陆用户信息
    Route::get('profile', 'UserController@userInfo')->name('user.info')->middleware('checkauth');
public function userInfo(){
   dd(\Auth::user()->toArray());
}
6.其它操作
// 获取登录用户$user = \Auth::user();// 退出登陆\Auth::logout();
\Auth::login($user); // 注册的用户让其进行登陆状态\Auth::check(); // 判断是否登陆返回bool// 记住状态,默认为false,只有俩小时,true为五年\Auth::attempt(['email' => $email, 'password' => $password],true);





PHP,MySQL,Linux


评论列表

手机扫码访问

亚宇博客