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

Laravel 其实已经封装好了用户认证功能,但是有时我们想自己操作以下,因此我就自己写了一个用户登陆注册的功能

1. 用户表users
image
  • 然后在 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);

你可能感兴趣的:(Laravel 自定义用户登录注册功能)