Laravel基本的HTTP身份验证检查返回false。

8

我正在使用Laravel提供的基本HTTP身份验证来登录我的网站。但是,当我调用Auth::Check()时,即使我已经登录,我总是得到false作为响应。

Auth::Check()是否不适用于基本身份验证模型?如果不是,有没有办法检查基本身份验证以查看用户是否已登录?

这是我的用户类:

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'email', 'password',
    ];

    /**
     * The attributes excluded from the model's JSON form.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    public function getRememberToken()
    {
        return $this->remember_token;
    }

    public function setRememberToken($value)
    {
        $this->remember_token = $value;
    }

    public function getRememberTokenName()
    {
        return 'remember_token';
    }
}

这是代码段,我在其中设置了身份验证过滤器使用

$this->middleware('auth.basic', ['only' => ['create', 'store', 'edit', 'update', 'destroy']]);

这是我的Auth::Check()调用(始终打印0):

public function show($id)
{
    echo \Auth::check() ? '1' : '0';
    die();
    #.......
}

我的路由:

路由

你是否按照 https://laravel.com/docs/5.1/authentication#http-basic-authentication 的步骤进行操作了? - Mahmoud Tantawy
Auth::check就是所使用的,你能否发布一下你的代码? - UX Labs
@LiamPotter 看起来你已经使用中间件检查了身份验证。为什么还要在控制器中再次检查呢?如果您没有通过身份验证,Laravel 将不会让您进入控制器方法。 - parrker9
@parrker9 这只是用于检查在调用方法时是否返回了值。我想使用 Auth::Check 的原因是,如果检查通过,则在我的视图代码中输出某些 HTML 元素。 - Liam Potter
你能否添加路由?到目前为止,你的代码看起来是正确的。 - UX Labs
@Yousef 我已经添加了一个'php artisan route:list'的输出图片。 - Liam Potter
1个回答

3

这是在5.2版本中发生的变化。

如果您将使用session、csrf、cookie等扩展,您应该在路由中像这样使用“web”中间件:

Route::group(['middleware' => ['web']], function () {
//
});

在您的项目中,您可以看到新的kernel.php文件如下:

/**
 * The application's route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
],

'api' => [
    'throttle:60,1',
],
];

更多信息:https://laravel.com/docs/5.2/releases


当我通过Web中间件路由控制器和视图时,它根本没有触发Authenticate.php,这允许在用户未登录和验证的情况下打开控制器。我使用数据库会话,但我也尝试使用文件并获得了相同的结果。 - mal
直到我将带有“auth”中间件的路由放置在“web”路由组内,它才对我起作用:Route::group(['middleware' => ['web']], function () { Route::get('/dashboard', ['middleware' => 'auth', 'uses' => 'dashboard@index']); }); - mal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接