[英]How to combine Session and API authentication in Laravel?
我有一个只有 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();
});
其他 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');
我在Table1Controller
和Table2Controller
添加了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-auth
的1.*
版本,目前是最新的)。
或者
您还可以使用默认的 Laravel 会话处理程序,它使用 cookie。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.