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';
}
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

问题解决了,表的主键问题

2年前 评论
讨论数量: 4

没记错的话,中间件 AuthenticateSession::class 这个得取消注释

2年前 评论

@deatil 在 kernel.php的 这个数组里去掉吗?

    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            // \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],

        'api' => [
            'throttle:api',
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
    ];
2年前 评论
deatil 2年前
半路出家的花和尚 (作者) (楼主) 2年前
半路出家的花和尚 (作者) (楼主) 2年前
chowjiawei

楼上可能说的是对的,请采纳我的

2年前 评论

问题解决了,表的主键问题

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!