【问题标题】:Laravel Basic HTTP Auth Check Returning FalseLaravel 基本 HTTP 身份验证检查返回 False
【发布时间】:2016-04-22 19:34:26
【问题描述】:

我正在使用 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();
    #.......
}

我的路线:

【问题讨论】:

  • Auth::check 正是使用的,你能发布你的代码吗?
  • @LiamPotter 看起来您已经使用中间件检查了身份验证。为什么要在控制器中再次检查它?如果你没有通过身份验证,Laravel 不会让你进入控制器方法。
  • @parrker9 仅用于检查调用方法时是否返回了值。如果检查在我的视图代码中通过,我想使用 Auth::Check 输出某些 HTML 元素。
  • 你也可以添加路线吗?到目前为止,您的代码似乎是正确的

标签: php laravel authentication http-authentication


【解决方案1】:

在 5.2 版本中有所改变。

如果你将使用 session、csrf、cookie ext。你应该在你的路由中使用这样的“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

【讨论】:

  • 当我通过网络中间件路由控制器并查看时,它根本没有命中 Authenticate.php,它允许在用户未登录和身份验证的情况下打开控制器。我使用数据库会话,但我也尝试了具有相同结果的文件。
  • 直到我在“web”路由组中放置了一个带有“auth”中间件的路由,它对我不起作用:Route::group(['middleware' => ['web'] ], function () { Route::get('/dashboard', ['middleware' => 'auth', 'uses' => 'dashboard@index']); });
猜你喜欢
  • 1970-01-01
  • 2017-06-12
  • 1970-01-01
  • 2014-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多