从 Laravel 令牌中获取不记名令牌

时间:2021-04-13 13:15:26

标签: laravel laravel-passport

您好,我正在尝试从 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)
提前致谢

3 个答案:

答案 0 :(得分:0)

你能用这样的例子吗>

<?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
        ];
    }
}

答案 1 :(得分:0)

用它来生成令牌::

结构::

$client->createToken(’set token name you wants’)->accessToken;

示例::

$token =  $client->createToken(’laravel’)->accessToken;

答案 2 :(得分:0)

我对这个问题已经快疯了!当尝试访问诸如 /api/user 之类的路由时,它为什么一直吐出愚蠢的 Unauthenticated 错误,这完全没有意义。经过多次搜索(大量搜索),我终于找到了答案。如果你从 Laracasts 看到这个 fero,你就是我的英雄!

您是否检查了 app\Providers\RouteServiceProvider.php ?

在 mapApiRoutes() 中,您可以设置中间件。检查以确保其 auth:api。如果不是,请更改它。另外,从路由 api.php 文件中删除 auth 中间件。

https://laracasts.com/discuss/channels/laravel/laravel-53-passport-api-unauthenticated-in-postman-using-personal-access-tokens

编辑:

对上面提到的 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,您需要:

设置方法为GET 输入带有相关参数的连接 URL,即 http://example.com/connect?client_id=1&client_secret=W2zogh7tiBh2jfHleYuzpViv7dqynDYQ6O07DKLj&username=test@test.com&password=123456 单击标题选项卡(在授权旁边),添加一个 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 中创建一个新路由。下面的路由将简单地输出当前 API 用户的信息:

Route::group(['prefix' => 'user'], function() {
    Route::get('/', function() {
        return response()->json(request()->user());
    });
});

完成上述操作后,对 Postman 进行以下更改:

设置方法为GET 更改 URL 以指向 API 路由,即 http://example.com/api/user 再次单击 headers 选项卡并添加一个新的 Authorization 密钥和 Bearer access_token_here 的值(将 access_token_here 替换为您之前复制的访问令牌) 点击发送按钮 示例输出:

{
  "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"
}