三.设置登陆功能
15.设置路由 /routes/web.php
// 登陆使用 Route::group(['prefix' => 'admin'],function() { // 登陆页面 Route::get('/login',[App\Http\Controllers\Admin\LoginController::class, 'showLoginForm']) ->name('admin.loginForm'); // 登陆提交页面 Route::post('/login',[App\Http\Controllers\Admin\LoginController::class, 'login'])->name('admin.login'); // 退出登陆 Route::get('/logout',[App\Http\Controllers\Admin\LoginController::class, 'logout'])->name('admin.logout'); });
16. 安装ui用户验证包
composer require laravel/ui
17. 建立以上路由对应控制器和方法
/app/Http/Controllers/Admin/LoginController.php
用到的方法可以查看文件 /vendor/laravel/ui/auth-backend/AuthenticatesUsers.php
文件有各种方法,可重新定义,比如登陆用的是邮箱,现在修为用户名
namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use Illuminate\Foundation\Auth\AuthenticatesUsers; use Illuminate\Http\Request; class LoginController extends Controller { use AuthenticatesUsers; /** * 登陆页面 * @return \Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View */ public function showLoginForm() { return view('admin.login_register.login'); } /** * 设置登陆成功后的跳转页 * @return string */ public function redirectTo(){ return route('admin.layout'); } /** * 设置登陆字段 * @return string */ public function username() { return 'name'; } /** * 登陆退出 * @param Request $request * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector */ public function logout(Request $request) { $this->guard()->logout(); $request->session()->invalidate(); return redirect(route('admin.loginForm')); } }
18.分别建立上面对应的模板文件
/resources/views/admin/login_register/login.blade.php
/resources/views/admin/login_register/base.blade.php
上面两个文件参考layuiadmin的文件/layuiAdmin/admin/std/dist/views/user/login.html
此时访问 /admin/login
即可用上面两个注册好的账号正确登陆
19.已经添加了用户认证,此时,在路由中,分别加上对应的认证中间件
比如:上面的后台布局,要用户认证,则修改成如下
// 后台布局 Route::group(['prefix' => 'admin','middleware'=>'auth'], function() { // 后台首页 Route::get('/',[App\Http\Controllers\Admin\IndexController::class, 'layout'])->name('admin.layout'); // layuiadmin原模板模块 - 控制台 Route::get('/index',[App\Http\Controllers\Admin\IndexController::class, 'index'])->name('admin.index'); // layuiadmin原模板模块 - 主页一 Route::get('/index1',[App\Http\Controllers\Admin\IndexController::class, 'index1'])->name('admin.index1'); // layuiadmin原模板模块 - 主页二 Route::get('/index2',[App\Http\Controllers\Admin\IndexController::class, 'index2'])->name('admin.index2'); });
20.添加退出功能,以便能正常使用登陆认证功能
在/resources/views/admin/layout.blade.php添加退出链接
即
<dd style="text-align: center;"><a href="">退出</a></dd>
修改为
<dd style="text-align: center;"><a href="{{route('admin.logout')}}">退出</a></dd>
此时登陆和退出,都能正常使用
21.以上退出之后,当默认访问 /admin时,会报错,说没有找到 Route[login],
这个是因为中间件
/app/Http/Middleware/Authenticate.php
认证中的跳转是这样的
protected function redirectTo($request) { if (! $request->expectsJson()) { return route('login'); } }
没有定义login相关的命名路由,
修改中间上面的方法中的路由,定位到已经定义过的命名路由
protected function redirectTo($request) { if (! $request->expectsJson()) { // return route('login'); return route('admin.loginForm'); } }