我可以从Insomnia或Postman使用我的api基础项目,但是当我想通过web和浏览器使用它时,我应该在哪里插入Auth密钥或令牌?
这是我的控制器代码:
public function show_user_list()
{
return response()->json(User::all(), 200);
}路由:
Route::group(['middleware' => 'auth:api'], function() {
Route::get('/users', 'UserController@show_user_list')->name('show_user_list');
});当我想通过web和浏览器使用它时,我应该在哪里插入Auth密钥或令牌?
我的意思是,我创建了一个api基础项目,我开发了它,现在我想使用我的项目的前端与laravel本身的视图和刀片作为api。
我该怎么办?
发布于 2018-10-07 00:27:10
你必须安装Laravel Passport才能使用你自己的API,而不用太担心令牌:
composer require laravel/passport
add Passport::ignoreMigrations as per documentation
php artisan passport:install
add CreateFreshApiToken middlewarehttps://laravel.com/docs/5.6/passport#consuming-your-api-with-javascript
如果您使用的是JQuery:
<script type="text/javascript">
jQuery(function ($) {
$.ajaxSetup({
headers: {
'X-Requested-With': 'XMLHttpRequest',
'X-CSRF-TOKEN': '{{ csrf_token() }}'
}
});
});
</script>如果你用的是VueJs,一切都准备好了
如果您仍然想使用TokenGuard,那么您必须实现Passport的工作:以安全的方式从前端到后端来回传递和访问API令牌
发布于 2018-10-07 00:40:19
除了亚历克斯的回答之外,如果您想使用内置的token保护,您所要做的就是向您的users表中添加一个api_token列,如下所示:
$table->string('api_token', 60)->unique()->nullable()->default(null);就这样。现在,您只需使用auth:api中间件,并通过a)在请求主体中作为api_token发送令牌,或者通过2)在bearer token头中发送令牌,或者通过3)在PHP_AUTH_PW头中发送令牌。
如果您想要生成api令牌,只需添加一个方法,为每个用户生成一个唯一的令牌,如下所示:
public function generateApiKey(){
do {
$this->api_token = str_random(60);
} while($this->where('api_token', $this->api_token)->exists());
$this->save();
}或者,您也可以使用Str::orderedUuid
就这样。Passport比token保护更好,因为在token保护中,API令牌基本上是以纯文本形式存储的,在数据库中不会过期,这可能是不安全的。但是,如果您的用例需要简单性,这可能是可行的方法
https://stackoverflow.com/questions/52680852
复制相似问题