2016-01-17 17 views
7

Tôi đang sử dụng xác thực HTTP cơ bản được cung cấp trong Laravel để đăng nhập vào trang web của mình. Tuy nhiên, khi tôi gọi Auth::Check() Tôi luôn luôn có được sai như phản ứng mặc dù tôi đang đăng nhập.Kiểm tra xác thực HTTP cơ bản của Laravel Trả về False

Liệu Auth::Check() không hoạt động với mô hình xác thực cơ bản và nếu không, có cách nào để kiểm tra xác thực cơ bản để xem nếu người dùng đăng nhập?

Đây là lớp người sử dụng tôi:

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'; 
    } 
} 

Đây là phân đoạn của mã nơi tôi đặt bộ lọc xác thực để sử dụng

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

Và đây là Auth::Check() kêu gọi của Mẹ (Luôn in 0):

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

Tuyến đường của tôi: Routes

+0

Bạn đã làm theo các bước từ https://laravel.com/docs/5.1/authentication#http-basic-authentication? –

+0

Auth :: kiểm tra là chính xác những gì được sử dụng, bạn có thể gửi mã của bạn? –

+0

@LiamPotter Có vẻ như bạn đã kiểm tra xác thực bằng phần mềm trung gian. Tại sao bạn lại kiểm tra lại nó trong bộ điều khiển? Nếu bạn không được xác thực, Laravel sẽ không cho phép bạn bên trong phương thức điều khiển. – parrker9

Trả lời

3

Nó đã thay đổi trong phiên bản 5.2.

Nếu bạn sẽ sử dụng phiên, csrf, cookie ext. bạn nên sử dụng "web" middleware như thế này trong các tuyến đường của bạn:

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

Và bạn có thể thấy trong dự án của bạn tập tin kernel.php mới là như thế này:

/** 
* 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', 
], 
]; 

Thông tin thêm: https://laravel.com/docs/5.2/releases

+0

Khi tôi định tuyến một bộ điều khiển và xem qua phần mềm trung gian trên web, nó không nhấn vào tất cả Authenticate.php và nó cho phép mở bộ điều khiển mà không cần người dùng đăng nhập và xác thực. Tôi sử dụng các phiên cơ sở dữ liệu, nhưng tôi cũng đã thử các tệp có cùng kết quả. – mal

+0

Nó không hoạt động cho tôi cho đến khi tôi đặt tuyến đường với phần mềm trung gian "auth" bên trong nhóm tuyến đường "web" là: Tuyến đường :: nhóm (['middleware' => ['web']], hàm() { Tuyến đường :: get ('/ dashboard', ['middleware' => 'auth', 'sử dụng' => 'dashboard @ index']); }); – mal

Các vấn đề liên quan