美文网首页
Laravel 自定义用户登录注册功能

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

作者: CaptainRoy | 来源:发表于2018-07-17 17:03 被阅读1372次
    • Laravel 其实已经封装好了用户认证功能,但是有时我们想自己操作以下,因此我就自己写了一个用户登陆注册的功能
    1. 用户表users
    屏幕快照 2018-07-17 下午4.34.10.png
    • 然后在 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 类就是验证是否登陆的中间件类
    <?php
    
    namespace App\Http\Middleware;
    
    use Closure;
    
    class CheckAuth
    {
        /**
         * Handle an incoming request.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  \Closure  $next
         * @return mixed
         */
        public function handle($request, Closure $next)
        {
            if (!\Auth::check()) {
                // 以json格式返回
                return response()->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);
    

    相关文章

      网友评论

          本文标题:Laravel 自定义用户登录注册功能

          本文链接:https://www.haomeiwen.com/subject/kslgpftx.html