简体   繁体   English

从 laravel 令牌获取不记名令牌

[英]Get bearer token from laravel token

Hello there i am trying to get the same access token from Laravel passport i can access this token by this code您好,我正在尝试从 Laravel 护照获取相同的访问令牌,我可以通过此代码访问此令牌

$client->token()

and response will be like that和响应会是这样的

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

but actually need to generate access token (Bearer token)但实际上需要生成访问令牌(Bearer token)
thanks in advance提前致谢

can you use an example like this>你能用这样的例子吗>

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

Use this to generate token::使用它来生成令牌::

Structure::结构::

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

Example::例子::

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

I've been going absolutely insane about this issue.我对这个问题简直要疯了。 It just made no freaking sense as to why it kept spitting out the stupid Unauthenticated error when trying to hit-up a route such as /api/user, After much searching (MUCH searching).在经过大量搜索(大量搜索)之后,它为什么在尝试访问 /api/user 之类的路由时不断吐出愚蠢的未经身份验证的错误,这简直是毫无意义。 I finally found the answer, If you see this fero from Laracasts, you're my hero!我终于找到了答案,如果你看到 Laracasts 的这个 fero,你就是我的英雄!

Did you check app\Providers\RouteServiceProvider.php?你检查过 app\Providers\RouteServiceProvider.php 了吗?

in the mapApiRoutes() you can set the middleware.在 mapApiRoutes() 中,您可以设置中间件。 check to make sure its auth:api.检查以确保其身份验证:api。 if its not, change it.如果不是,请更改它。 also, remove the auth middleware from the route api.php file.另外,从路由 api.php 文件中删除 auth 中间件。

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

Edit:编辑:

Once you've made the change to the app\Providers\RouteServiceProvider.php mentioned above, proceed with the below example.对上述 app\Providers\RouteServiceProvider.php 进行更改后,请继续执行以下示例。

First things first, we need to retrieve a fresh access_token.首先,我们需要检索一个新的 access_token。 To do this, I'm using the password grant_type (more info: https://laravel.com/docs/5.4/passport#password-grant-tokens )为此,我使用密码grant_type(更多信息: https://laravel.com/docs/5.4/passport#password-grant-tokens

To retrieve a fresh access_token, I've created a new route on routes/web.php and called it /connect.为了检索新的 access_token,我在 routes/web.php 上创建了一个新路由并将其命名为 /connect。 I've then placed the code from the above link into it:然后,我将上面链接中的代码放入其中:

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

Using Chrome Postman, you need to:使用 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 key of Accept and value of application/json Hit the Send button Example result: 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="
}

Highlight the access_token string and copy it to a text editor.突出显示 access_token 字符串并将其复制到文本编辑器。

You'll then need to create a new route in routes/api.php.然后,您需要在 routes/api.php 中创建新路由。 The route below will simply output the current API users' info:下面的路线将简单地 output 当前 API 用户信息:

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

Once you've done the above, make these changes to Postman:完成上述操作后,对 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 token you copied earlier) Hit the Send button Example output: 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM