0

laravel 使用middleware 做路由保护,用户验证通过但是依然跳转login页面。

I.测试验证成功无误

clipboard.png

clipboard.png

II.关闭中间件则可以继续redirect

clipboard.png
clipboard.png
clipboard.png

以下为代码部分:

1路由:

//后台路由部分(不需要权限判断)
Route::group(['prefix' => 'admin'],function(){
//后台登录页面
Route::get('public/login','Admin\PublicController@login') -> name('login');
//后台登录处理页面
Route::post('public/check','Admin\PublicController@check');
//退出地址
Route::get('public/logout','Admin\PublicController@logout');
});

//后台路由部分(需要权限判断)
Route::group(['prefix' => 'admin','middleware' => 'auth'],function(){
//后台首页路由
Route::get('index/index','Admin\IndexController@index');
Route::get('index/welcome','Admin\IndexController@welcome');
});

2controller


namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Auth;

class PublicController extends Controller
{
//登录页面的展示
public function login(){
    //展示视图
    return view('admin.public.login');
}

//验证数据
public function check(Request $request){
    //开始自动验证
    $this -> validate($request,[
        //验证规则语法   需要验证的字段名 => '验证规则1|验证规则2|验证规则3:20|...'
        //用户名,必填,长度介于2~20
        'username'    =>    'required|min:2|max:20',
        //密码,必填,长度至少是6
        'password'    =>    'required|min:6',
        //验证码,必填,长度等于5,必须是合法的验证码
        'captcha'    =>    'required|captcha'
    ]);
    //继续开始进行身份核实
    $data = $request -> only(['username','password']);
    $data['status'] = '2';    //要求状态为启动的用户
    $result = Auth::guard('admin') -> attempt($data,$request -> get('online'));
    //判断是否成功
    if($result){
        //跳转到后台页面
        return redirect('/admin/index/index');
    }else{
        //跳到登录页面
        return redirect('/admin/public/login') -> withErrors([
            'loginError'    =>    '用户名或密码错误。'
        ]);
    }
}

//用户退出
public function logout(){
    //退出
    Auth::guard('admin') -> logout();
    //跳转到登录页面
    return redirect('/admin/public/login');
    }
}



3模型

namespace App\Admin;

use Illuminate\Database\Eloquent\Model;
//引入trait
use Illuminate\Auth\Authenticatable;

class Manager extends Model implements \Illuminate\Contracts\Auth\Authenticatable
{
//定义当前模型需要关联的数据表
protected $table = 'manager';

//使用trait,就相当于将整个trait代码段复制到这个位置
use Authenticatable;

}

4handler

clipboard.png

5auth

return [

'defaults' => [
    'guard' => 'web',   //守门员的名称
    'passwords' => 'users',
],



'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    //自己定义后端guard
    'admin' => [
        'driver' => 'session',
        'provider' => 'admin',
    ],
    'api' => [
        'driver' => 'token',
        'provider' => 'users',
    ],
],



'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],
    //定义admin的provider
    'admin' => [
        'driver' => 'eloquent',
        'model' => App\Admin\Manager::class,
    ],

    // 'users' => [
    //     'driver' => 'database',
    //     'table' => 'users',
    // ],
],


'passwords' => [
    'users' => [
        'provider' => 'users',
        'table' => 'password_resets',
        'expire' => 60,
    ],
]
Astro 4
2019-04-11 提问
5 个回答
1

已采纳
'middleware'=>'auth:admin'
0

老哥,我也是一模一样的问题 请问解决了吗

0

Route::group(['prefix' => 'admin','middleware' => 'auth:admin'], function(){

//后台的首页
Route::get('index/index','Admin\IndexController@index');
Route::get('index/welcome','Admin\IndexController@welcome');

});

0

我也遇到了相同的问题,'middleware' => 'auth:admin' 这样也没有用啊,一样死循环。求解决之道。

解决了,自己莫名其妙好了,就是用的'middleware' => 'auth:admin' 感谢大神!

0

clipboard.png因为定位的不是路由

撰写答案

推广链接