laravel8.5与layuiadmin整合(4)

三.设置登陆功能

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');
           
        }
    }
原文地址:https://www.cnblogs.com/lin3615/p/15802944.html