在 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);