Laravel护照(不能理解)

时间:2018-03-30 09:26:53

标签: vue.js axios laravel-5.5 laravel-passport

我看过很多文章,看了很多关于Laravel护照的视频,但仍然无法理解一些事情。

我有一个适用于Laravel 5.5 + vueJs的应用程序。所有对后端的请求都通过axios发送。我的所有路线都位于api.php

Route::middleware('api')->group(function(){

    Route::get('/prepare/', 'CompgenApiController@prepareDefault');

    Route::post('/replace/', 'CompgenApiController@replaceImage');

    Route::get('/replaceall/', 'CompgenApiController@replaceAllImages');

    Route::get('/collage/', 'CompgenApiController@collage'); //@todo переделать на POST

    Route::get('/generate/', 'CompgenApiController@generate');

    Route::post('/upload/', 'CompgenApiController@userUpload');

    Route::post('/reupload/', 'CompgenApiController@moderationReupload');

});

我也有一个VK机器人向相同的路线发送请求。 目前我遇到了一些困难。对于某些路由,我需要检查用户是否已获得授权(但这是一个可选条件),如果确实如此,我需要将用户ID写入数据库。对我来说,这是一个惊喜

  

Auth :: check

虽然我被授权,但

返回false。经过一些搜索后,我了解到授权后启动的会话与API没有关联,我建议使用Passport。我无法理解以下内容

  1. 如果我的申请是从vueJs发出请求,是否需要使用护照?

  2. 如何注册用户?我是否必须为每个新用户发放我的令牌?

  3. 如何验证用户是否已获得授权?

  4. 在某些情况下,我需要检查用户是否已获得授权,但如果不是,则不要干扰请求。我怎么能这样做?

  5. 也许在我的情况下,我根本不需要护照?

1 个答案:

答案 0 :(得分:2)

Passport是一个oAuth2服务器实现,实质上,它允许您通过传递每个请求的令牌来验证用户。如果您不想对用户进行身份验证,则无需传递令牌,也不会涉及护照。

Laravel应用而言,如果您从自己的前端使用API​​,则可能只想使用implicit grant。以下是您设置的方法:

1)安装护照并将PassportServiceProvider添加到config / app.php

2)php artisan migrate设置护照迁移

3)php artisan passport:install - 设置您的oAuth服务器

4)在User模型中添加Laravel\Passport\HasApiTokens特征,如下所示:

namespace App;

use Laravel\Passport\HasApiTokens;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;
    // Other model methods
}

5)通过在boot的{​​{1}}方法中添加以下内容来设置护照路线:

app\Providers\AuthServiceProviders.php

6)将\Laravel\Passport\Passport::routes(); 中的api driver更改为config/auth.php

token

设置护照,现在您只需将'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ], 中间件添加到CreateFreshApiTokenweb即可处理所有令牌逻辑:

app/Http/Middleware/kernel.php

现在,您需要做的就是保护路由,就是在该路由上使用auth:api中间件:

'web' => [
    // ..Other middleware...
    \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class,
],

这应该都可以,但你也想要注册一个新用户。您所做的就是正常添加身份验证路由到Route::middleware('auth:api')->get('/profile','Api\UsersController@edit');

web.php

然后,您可以简单地将帖子请求发送到这些路由,Route::post('/login', 'Auth\LoginController@login'); Route::post('/logout', 'Auth\LoginController@logout'); Route::post('/register', 'Auth\RegisterController@register'); 将为您处理所有令牌内容。

它处理需要身份验证的api路由,但是,您还提到要检查用户是否经过身份验证,但不一定要锁定路由,为此您只需使用:

Laravel

这将获得经过身份验证的用户,因此您可以执行以下操作:

Auth::guard('api')->user();

就是这样。希望我已经涵盖了那里的一切。