[英]Get bearer token from laravel token
您好,我正在嘗試從 Laravel 護照獲取相同的訪問令牌,我可以通過此代碼訪問此令牌
$client->token()
和響應會是這樣的
{
"id": "ece3950bfXXXXXXXXXXXXXXXXXXXXXXXXXec7e69bc1e80",
"user_id": 1,
"client_id": 1,
"name": "client",
"scopes": [],
"revoked": false,
"created_at": "2021-04-11 14:56:15",
"updated_at": "2021-04-11 14:56:15",
"expires_at": "2022-04-11T14:56:15.000000Z"
}
但實際上需要生成訪問令牌(Bearer token)
提前致謝
你能用這樣的例子嗎>
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Actions\Fortify\PasswordValidationRules;
use Illuminate\Validation\ValidationException;
use Illuminate\Support\Facades\Hash;
use App\Models\User;
class AuthController extends Controller
{
//
use PasswordValidationRules;
public function login() {
request()->validate([
'email' => 'required|email',
'password' => 'required',
'device_name' => 'required'
]);
$user = User::where('email', request()->email)->first();
if (! $user || ! Hash::check(request()->password, $user->password)) {
throw ValidationException::withMessages([
'email' => ['Bad credentials, please try again'],
]);
}
return [
//Here you get the Token
"token" => $user->createToken(request()->device_name)->plainTextToken
];
}
}
使用它來生成令牌::
結構::
$client->createToken(’set token name you wants’)->accessToken;
例子::
$token = $client->createToken(’laravel’)->accessToken;
我對這個問題簡直要瘋了。 在經過大量搜索(大量搜索)之后,它為什么在嘗試訪問 /api/user 之類的路由時不斷吐出愚蠢的未經身份驗證的錯誤,這簡直是毫無意義。 我終於找到了答案,如果你看到 Laracasts 的這個 fero,你就是我的英雄!
你檢查過 app\Providers\RouteServiceProvider.php 了嗎?
在 mapApiRoutes() 中,您可以設置中間件。 檢查以確保其身份驗證:api。 如果不是,請更改它。 另外,從路由 api.php 文件中刪除 auth 中間件。
編輯:
對上述 app\Providers\RouteServiceProvider.php 進行更改后,請繼續執行以下示例。
首先,我們需要檢索一個新的 access_token。 為此,我使用密碼grant_type(更多信息: https://laravel.com/docs/5.4/passport#password-grant-tokens )
為了檢索新的 access_token,我在 routes/web.php 上創建了一個新路由並將其命名為 /connect。 然后,我將上面鏈接中的代碼放入其中:
Route::get('connect', function (Request $request) {
$http = new GuzzleHttp\Client;
$response = $http->post('http://example.com/oauth/token', [
'form_params' => [
'grant_type' => 'password',
'client_id' => $request->client_id,
'client_secret' => $request->client_secret,
'username' => $request->username,
'password' => $request->password,
'scope' => ''
],
]);
return json_decode((string) $response->getBody(), true);
});
使用 Chrome Postman,您需要:
Set the method to GET Enter the connect URL with the relevant params ie http://example.com/connect?client_id=1&client_secret=W2zogh7tiBh2jfHleYuzpViv7dqynDYQ6O07DKLj&username=test@test.com&password=123456 Click the headers tab (it's next to Authorization), add a Accept 的鍵和 application/json 的值 點擊發送按鈕 示例結果:
{
"token_type": "Bearer",
"expires_in": 31535999,
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImE0MmFiYjZkNTQ5M2ZjMGQxYzVmM2E3MDFlOTNjMTRlOTQxMTBmNWQ5NmI1ODI0NTBmMmEyM2MwMzQ5OTMwODdiZGUwYTI5ZDU5N2VjYTExIn0.eyJhdWQiOiIxIiwianRpIjoiYTQyYWJiNmQ1NDkzZmMwZDFjNWYzYTcwMWU5M2MxNGU5NDExMGY1ZDk2YjU4MjQ1MGYyYTIzYzAzNDk5MzA4N2JkZTBhMjlkNTk3ZWNhMTEiLCJpYXQiOjE0OTE0Njg4ODIsIm5iZiI6MTQ5MTQ2ODg4MiwiZXhwIjoxNTIzMDA0ODgxLCJzdWIiOiI3NWNlZDUwMC0xNTQ0LTExZTctOWE4ZS1hZDVmMWFlZTM4OWUiLCJzY29wZXMiOltdfQ.dV3DKDM7IN-oGnZ_Rw10VnYkh9ySlz5i859yO0roZLAYwgmsmEEZK_vpttudUoKmYenqibZQXg6HG4KHRd-cgas_2DpO-7UCkXQYNTriUUAQ4XM6To86EOaf2BW1a07kdVGXTdo_ETQc7heUG0NWQ8-Hrr2NHkSyDULupDs8gDg_fg6xSVsFUEDZB32UIGwquAHT1Y21ZpTdQar0Rag9qOLeZYTR05ro0v9_rQbSoDgJiZE3KT9GbqwU_BegWRmAwY6LmxG4raZpSMgqYEMo3D9D0lJiomOLK4pSjqmi0EVti04zZ6Vg4GHE6S1TgC6IlakV2bMItXTWuZT6T0jEba-3ctaC4K2T8F4P8J6t-99mKY-_zSwgfGm1FErK09qixJlZ4zFsCCT7MgNQVoyu7GkJdTJVlpL1QXLc1QhfrtW11a4gg4Nlja_VyRdB9fZHomgMLpvm_HvSlqEvpeWb8wGkCts9w7ivSNLim-LuFgswGNhTZZqLEbuwB6sJV-l1V0MJCq7_h0yTmLlBdoUkxCaDJJvkUSLk0MUaalAAzY1OCxm-tJcKn31m4yOwf25ZDWf8tWuOTKarEbFyxjB0elkxXQXGe7J7TJAg0tuIEQ8YTL3ExJQ6I7zwtCL83bPOWYRGlJrsX6Lsf0qB-xMVD2DzA3JKDKvZTp5x92kP821",
"refresh_token": "ArOWW0glHjflLpL4fKOsrNUXT5v91u+CjwcE8LBvH7GJsaM0gWaFe8GH9zXjh8SHew+cg7v1IMiIPLYSVdf7h8oOeV7wgwjChI9YM0Kt6iE4wOXJuy0VwPSCj+danHDuWC3nJWYLrPydTE3h/jgFNjWEPfgXGLfiRWjWQMozddz5EWd4pvUI7J64Lw6cMCg/BslZLHtfN7IWoC1RQGp5K0cGO0QmZfsGMSzsoSUNFjv16BXiKSqlNvs5aGhxErFY4wEOKqBifXUkb3SwnK/iHKg3irmqj4fOf/aKNyCdd/PJCHrRPocrW83oM1sjq7eDufEIlgxmy7uRset8GLAWjx/n6rzkxz2QM0/9Lyc/XN9OL00XBYjA47a1wL55qUUUYWevaFwxWX8LG2UjBf9Vv2lfvLcBBkbgqpalePMDh6wb8IDyJek4BbvZtJ1VZ/l+A9XXY9rQt/hIDdoOAtib8CGr9/CERFIrByZa3TEJBCLAa2FvJSIhHVnKvnuvZX3e9qhTkgHqowJrWg2C3VyPDQYAdIhdpTEvs0pcGSAZWhwXfu9xKQOeyRTEScbLKQmuW+sGbwU+qfdLgh/BR5kW4TMer4TIzWKSuHsqmibgiUwaQkwTrtjH2Xz9Z9XmAbVzJ8pqbEZPe7t5whXDoRSnAwWymdxk2E7SiSsVUA3kX39="
}
突出顯示 access_token 字符串並將其復制到文本編輯器。
然后,您需要在 routes/api.php 中創建新路由。 下面的路線將簡單地 output 當前 API 用戶信息:
Route::group(['prefix' => 'user'], function() {
Route::get('/', function() {
return response()->json(request()->user());
});
});
完成上述操作后,對 Postman 進行以下更改:
Set the method to GET Change the URL to point to the API route ie http://example.com/api/user Click on the headers tab again and add a new key of Authorization and value of Bearer access_token_here (replace access_token_here with the access您之前復制的令牌)點擊發送按鈕示例 output:
{
"id": "75ced500-1544-11e7-9a8e-ad5f1aee389e",
"name": "test test",
"email": "test@test.com",
"created_at": "2017-03-30 23:29:03",
"updated_at": "2017-03-30 23:29:03"
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.