2016-09-18 118 views
3

當用戶在瀏覽器中輸入用戶名和密碼,登錄成功。Laravel 5.3 API

我喜歡做一些API請求用戶登陸之後。

Laravel 5.3提供路線api.php夾。在api.php

我已經包括:

Route::group(['middleware' => ['auth']], function() { 
    Route::get('/test', function (Request $request) { 
     return response()->json(['name' => 'test']); 
    }); 
}); 

當瀏覽器請求domain.com/api/test,由於某種原因,它被重定向到/home

API令牌不需要。

+0

嗨,你還需要幫助嗎?我面臨同樣的問題,但認爲我在api.php中的路由需要使用'auth:api'中間件方面取得了一些進展。 –

回答

5

如果您在api.php中指定路由,您需要使用auth:api中間件。因此,使用你的例子那就是:

Route::group(['middleware' => ['auth:api']], function() { 
    Route::get('/test', function (Request $request) { 
     return response()->json(['name' => 'test']); 
    }); 
}); 

注意有關令牌身份驗證和Laravel 5.3:

  • 如果你已經安裝laravel的默認身份驗證系統,您還需要添加一個列api_token給用戶表。如果您使用的是DB播種器,您可能需要添加如下內容: $table->char('api_token', 60)->nullable(); 您的用戶表播種器。或者只需手動添加列,然後用隨機的60個字符的鍵填充該列。
  • 提出請求時,可以將api_token作爲URL/Querystring參數添加,如下所示: domain.com/api/test?api_token=[your 60 char key]。 您也可以將密鑰作爲標題發送(如果使用Postman或類似標籤),即: 標題:Authorization,值:Bearer [your 60 char key]
  • 我爲了得到一個有用的錯誤,如果令牌不正確,而不僅僅是被重定向到登錄,還發送所有請求的以下標頭: 標頭:Accept,值:application/json。這允許在App/Exceptions/Handler.php內的unauthenticated()功能中的expectsJson()檢查能夠正常工作。

我發現很難找到Laravel清晰的文檔有關使用令牌身份驗證與5.3,我認爲這是因爲有一個驅動器利用Passport,它支持以不同的方式標記。下面是可能幫助大部分的文章得到它的工作:https://gistlog.co/JacobBennett/090369fbab0b31130b51

+0

謝謝。一些評論:'$ table-> char('api_token',60) - > nullable();'進行遷移,而不是播種器。另一方面,我必須自己創建該令牌,因爲向表單註冊新用戶並不能滿足我的需求。其他的東西:通過URL傳遞api_token對我來說不起作用(在Laravel 5.4中)。但它使用Postman作爲標題參數。 – mayid

1

這裏說laravel passport installation

同時消耗自己的API添加下面一行在你的配置/ app.php在中間件部分先安裝護照

'web' => [ 
// Other middleware... 
\Laravel\Passport\Http\Middleware\CreateFreshApiToken::class, 
], 

現在改變你的路線

Route::group(['middleware' => ['auth:api']], function() { 
Route::get('/test', function (Request $request) { 
    return response()->json(['name' => 'test']); 
}); 
}); 

現在在你的config/AUTH。PHP改變這些線

'api' => [ 
    'driver' => 'passport', 
    'provider' => 'users', 
], 
0

你被重定向到home的原因是因爲auth中間件定期檢測用戶的會話存儲在您的瀏覽器,但由於api中間件不使用會話(見附錄\ HTTP \ kernel.php),您的要求被認爲是unauthenticated

如果你想執行利用會話簡單的API,隨意添加他們在你web路線,並確保由內而外將它們分組,以確保他們一個auth中間件。