laravel8,自定义中间件,attmpt通过,check不通过的原因是什么?
现在碰到的问题是:
如果直接访问 /admin/do-login, auth(‘admin’)->attempt 方法是true,并且通过了。
当访问 /admin/home/index,auth(‘admin’)->check() 方法是 false。
在网上找了很多帖子,但是没找到问题的解决方法,感谢大佬抽空看下,下面是相关的代码:
repo: gitee.com/geekjhin/test-laravel8
中间件文件:
app/Http/Middleware/AdminAuth.php
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class AdminAuth
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
if(!\auth('admin')->check()){
return redirect('/admin/login');
}
return $next($request);
}
}
auth 配置文件
config/auth.php
'guards' => [
// 后台验证
'admin' => [
'driver' => 'session',
'provider' => 'admins',
]],
...
'providers' => [
'admins' => [
'driver' => 'eloquent',
'model' => App\Models\Admin\Admins::class,
]
kernel 注册
app/Http/Kernel.php
protected $routeMiddleware = [
'admin' => \App\Http\Middleware\AdminAuth::class
]
Model文件
app/Models/Admin/Admins.php
<?php
namespace App\Models\Admin;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\User as AdminAuth;
class Admins extends AdminAuth
{
use HasFactory;
protected $fillable = [
'user_name','password'
];
protected $hidden = [
'password'
];
}
路由配置文件
routes/web.php
Route::prefix('/admin')->namespace('App\Http\Controllers\Admin')->group(function (){
Route::get('/login', 'LoginController@index')->name('login');
Route::get('/do-login','LoginController@doLogin');
Route::middleware('admin')->group(function(){
Route::get('/home/index','HomeController@index');
});
});
控制器文件
app/Http/Controllers/Admin/LoginController.php
public function doLogin(Request $request){
// Auth::guard('admin)->att...
$rs = auth('admin')->attempt(['user_name' =>'t0bPYFE2af','password' => 'password']);
if ($rs) {
return redirect('/admin/home/index');
} else {
return back();
}}
app/Http/Controllers/Admin/HomeController.php
public function index (){
echo '123';
}
推荐文章: