繁体   English   中英

如何在 Laravel 中结合会话和 API 身份验证?

[英]How to combine Session and API authentication in Laravel?

我有一个只有 3 个表的简单项目。 userstable2table3

用户架构

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();
});

其他 2 个表可通过 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');

我在Table1ControllerTable2Controller添加了auth:api中间件。

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

所以确切地说,我只有 2 页。 经过身份验证的用户进入的主页和登录页面。

添加用户时,它还会将一个随机字符串api_token保存到它的行中。

我正在使用 VueJS,我不想弄得一团糟,而是将 Node 与这个一起使用。 所以我已经下载了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 和 table2 api。

现在我知道我可以只使用 webpack 并使我的应用程序成为 SPA 并且只使用护照或者只是 jwt。 但我不想要,因为它是一个非常简单的应用程序,我想在不刷新页面的情况下执行操作,例如在表中添加数据、编辑数据并以模式显示等。

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

有没有更好的方法来做到这一点,我错过了?

如果用户电子邮件和数据库中的匹配项只需创建一个 Auth 会话,您就可以使用 Auth 外观。

Auth::user();

希望这可以帮助

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

我个人使用了一个 laravel 模块,它运行良好:

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

它允许您非常轻松地添加 JWT 身份验证保护,它使用Authorization: Bearer xxx标头来验证用户。 xxx是这里的 JSON 网络令牌,它是一个包含加密用户信息的长字符串。 它可以在服务器端解密,然后可以识别用户。 更多信息可以在这里找到:

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

或者

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM