使用护照在移动api中验证我的用户

时间:2017-11-21 13:41:58

标签: laravel api laravel-passport

我想这样做:

  • 移动应用,使用用户名/电子邮件和密码向服务器发出请求,或者只是从他的网站信息中心获取的5位数代码
  • 服务器将验证这些凭据或代码,如果它们是正确的,请创建一个访问令牌并发送回来作为回应
  • 对于所有其他后续请求,客户端将在请求中发送该令牌,以便服务器可以对请求进行身份验证和处理

我做了什么:

已安装护照,在内核中添加了护照路径,将HasTokenApi添加到用户模型,Ran artisan命令用于安装护照。

我有一个客户端类型密码,客户端ID为2,代码为。

用户电子邮件:t@t.t传递:123456

这就是我获取访问令牌的方式:

            $client = new GuzzleHttp\Client;
            $url = "http://likebot.dev/";
            $urlApi = "http://likebot.dev/api/";
            $response = $client->post($url . 'oauth/token', [
                'form_params' => [
                    'client_id' => 2,
                    // The secret generated when you ran: php artisan passport:install
                    'client_secret' => 'oG0mEGRiVsH6xzOjCIu5C63w1bIJfHUXQyoUF2Ni',
                    'grant_type' => 'password',
                    'username' => 't@t.t',
                    'password' => '123456',
                    'scope' => '*',
                ],
            ]);

            // You'd typically save this payload in the session
            $auth = json_decode((string) $response->getBody());
            echo ($auth->access_token);

这是我在api.php路线中的路线:

Route::get('/user', function (Request $request) {
    return response()->json($request->
})->middleware('auth:api');

这就是我使用访问令牌的方式:

            $accessToken = 'access-token-here';
            $response = $client->get($urlApi . 'user', [
                'headers' => [
                    // 'Accept' => 'application/json',
                    'Authorization' => 'Bearer ' . $accessToken,
                ],
            ]);
            // ee($response);
            $user = json_decode((string) $response->getBody());

            ee($user);

问题是,即使我返回一个字符串或其他任何东西,响应也是空的。当我使用访问令牌时从标题中取消注释// 'Accept' => 'application/json',时,这将响应带有{'message': 'unauthorized'}消息的401状态代码!

1 个答案:

答案 0 :(得分:1)

对于有此问题的人!

在@jeffrey建议之后,我在阅读文档时开始使用JWT,它说Apache有一些Authorization标题的问题,我应该在Apache配置中添加一些代码!所以我把它添加到了.htaccess并解决了问题:

RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]