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

如何在Laravel中结合会话和API认证?

  •  1
  • wobsoriano  · 技术社区  · 5 年前

    我有一个简单的项目,只有3个表。这个 users , table2 ,和 table3 .

    用户架构

    Schema::create('users', function (Blueprint $table) {
      $table->bigIncrements('id');
      $table->string('username')->unique();
      $table->string('password');
      $table->string('api_token')->unique();
      $table->rememberToken();
      $table->timestamps();
    });
    

    其他两个表可以通过API资源访问。

    以下是我的路线:

    路由/web.php

    Route::get('/', 'Auth\LoginController@showLogin')->name('login');
    Route::post('/login', 'Auth\LoginController@login');
    Route::get('/logout', 'Auth\LoginController@logout')->name('logout');
    //Authenticated users will be redirected here
    Route::get('/home', 'HomeController@index')->name('home');
    

    路由/api.php

    Route::resource('/table1', 'Table1Controller');
    Route::resource('/table2', 'Table2Controller');
    

    我添加了 auth:api 中的中间件 Table1Controller Table2Controller .

    public function __construct()
    {
        $this->middleware('auth:api');
    }
    

    所以我只有两页。经过身份验证的用户访问的主页和登录页。

    添加用户时,它还保存一个随机字符串 api_token 去划船。

    我使用的是VueJS,我不想把它弄得乱七八糟。所以我下载了 vue.min.js 把它包括在我的 blade 文件夹。

    所以当你登录时,你将被重定向到 /home 第页。“我的网页”的布局页包含以下内容:

    <script src="{{ asset('js/vue.min.js') }}"></script>
    <script src="{{ asset('js/axios.min.js') }}"></script>
    <script>
    const user = @json(Auth::user());
    
    const http = axios.create({
      baseURL: '/api',
      headers: {
        'Authorization': user ? 'Bearer ' + user.api_token : ''
      }
    });
    </script>
    

    使用上面的代码,您应该能够在发送请求时访问table1和table2api。

    现在我知道我可以用webpack把我的应用变成SPA,用passport或者jwt。但我不想要,因为这是一个非常简单的应用程序,我想做的行动,而不刷新我的页面,如添加数据表,编辑数据和显示在一个模式等。

    顺便说一下,这个应用程序只会被同一个应用程序使用。没有其他服务可以访问它。我只想使用Vue来提高反应性,避免重新加载整个页面。

    有没有比这更好的方法让我想念呢?如有任何帮助或建议,将不胜感激。谢谢您。

    0 回复  |  直到 5 年前
        1
  •  0
  •   Aftab Ishfaq    5 年前

    如果数据库中的用户电子邮件和pass匹配,只需创建Auth会话,就可以使用Auth facade。

    Auth::user();
    

    希望这有帮助

        2
  •  0
  •   Flame    5 年前

    您可能正在寻找称为JWT或JSON Web令牌的东西。

    我个人使用过一个laravel模块,它工作得很好:

    https://packagist.org/packages/tymon/jwt-auth

    它允许您非常容易地添加一个JWT auth guard,它使用 Authorization: Bearer xxx 用于验证用户的头。这个 xxx 是这里的JSON web令牌,它是一个包含加密用户信息的长字符串。它可以在服务器端解密,然后识别用户。更多信息请访问:

    https://jwt-auth.readthedocs.io/en/develop/ (注意这是 1.* 版本 tymon/jwt-auth ,这是当前最新的)。

    或者

    您还可以使用默认的laravel会话处理程序,它使用cookie。