代码之家  ›  专栏  ›  技术社区  ›  Viktor

Laravel护照(无法理解)

  •  3
  • Viktor  · 技术社区  · 6 年前

    我读了很多关于Laravel passport的文章,看了很多视频,但有些东西还是不懂。

    我有一个与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 bot,它向相同的路由发送请求。 目前我有一些困难。对于某些路由,我需要检查用户是否已授权(但这是一个可选条件),如果是真的,我需要将用户id写入数据库。对我来说,令人惊讶的是

    身份验证::检查

    虽然我得到了授权,但返回了false。经过一些搜索,我了解到授权后启动的会话与API没有连接,建议我使用Passport。我无法理解以下事情

    1. 如果vueJs从我的应用程序发送请求,我是否需要使用passport?

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

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

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

    也许我根本不需要护照?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Student of Science craig_h    4 年前

    Passport是一个oAuth2服务器实现,本质上,它允许您通过在每个请求中传递令牌来验证用户。如果您不想对用户进行身份验证,则不需要传递令牌,passport也不会参与其中。

    就a而言 Laravel 如果您正在使用自己前端的API,您可能只想使用 implicit grant 。下面是如何设置的:

    1) 安装passport并将其添加到 PassportServiceProvider 配置/应用。php

    (2) php artisan migrate 设置passport迁移

    (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 您的方法 app\Providers\AuthServiceProviders.php :

    \Laravel\Passport\Passport::routes();
    

    6) 更改您的 api driver 在里面 config/auth.php token :

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
    
        'api' => [
            'driver' => 'passport',
            'provider' => 'users',
        ],
    ],
    

    这就建立了passport,现在您只需添加 CreateFreshApiToken 中间件到 web 在里面 app/Http/Kernel.php ,它处理所有令牌逻辑:

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

    现在,要保护路由,只需在该路由上使用auth:api中间件:

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

    然后,您只需向这些路线发出post请求 拉雷维尔 将为您处理所有代币。

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

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

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

    public function getGreeting(){
      $user = Auth::guard('api')->user();
    
      if($user !== null) {
        return response()->json(["message" => "Hello {$user->name}"], 200);
      }
    
      return response()->json(["message" => "Hello Guest"], 200);
    }
    

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