我已经使用Laravel Passport文档成功创建了server.app和client.app.一切都按预期工作.
client.app路由:
Route::get('callback', function (Request $request) { $http = new GuzzleHttp\Client; $response = $http->post('http://server.app/oauth/token', [ 'form_params' => [ 'grant_type' => 'authorization_code', 'client_id' => 3, 'client_secret' => 'secret', 'redirect_uri' => 'http://client.app/callback', 'code' => $request->code ] ]); return json_decode((string) $response->getBody(), true)['access_token']; });
默认情况下,此路由返回access_token,我可以使用它来执行任何操作.
请求:
http://server.app/oauth/authorize?client_id=3&redirect_uri=http%3A%2F%2Fclient.app%2Fcallback&response_type=code&scope=
返回:
http://client.app/callback?code=access_token
题:
如何使用client.app中给定的access_token 向server.app发出正确的请求以获取用户的电子邮件(s).
我应该使用: http://server.app/api/user
请求获取数据?如果是的话,我怎么能这样做?如果可能,请写一个代码.
谢谢你的回答.
我一直对这个问题感到十分疯狂!它只是毫不掩饰地知道为什么它Unauthenticated
在试图击中诸如此类的路线时不断吐出愚蠢的错误/api/user
.经过多次搜索(多次搜索),我终于找到了答案.如果你从Laracasts看到这个fero,你就是我的英雄!
你检查了
app\Providers\RouteServiceProvider.php
吗?在
mapApiRoutes()
你可以设置中间件.检查以确保它auth:api
.如果没有,改变它.另外,从路由文件中删除auth
中间件api.php
.
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
再次单击标题选项卡并添加新的键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" }
您是否尝试过在POSTMAN chrome应用程序上运行它?如果没有,请下载。https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbbcdddomop?hl=zh-CN
填写信息。
成功生成数据后,单击右上角的CODE按钮(我用绿色突出显示了它)。
最后,选择您的语言并复制代码。对于PHP,我选择了php cURL。
希望它能工作。