我可以使用Insomnia或Postman的api基础项目,但是当我想通过Web和浏览器使用它时,应该在哪里插入Auth Key或Token?
这是我的控制器代码:
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');
});
,当我想通过网络和浏览器使用它时,应该在哪里插入验证码或令牌?
我的意思是我创建了一个api基础项目,然后开发了它,现在我想使用laravel本身的视图和Blade作为api来使用项目的前端。
我该怎么办?
答案 0 :(得分:0)
您必须安装Laravel Passport才能使用自己的API,而不必过多担心令牌:
composer require laravel/passport
add Passport::ignoreMigrations as per documentation
php artisan passport:install
add CreateFreshApiToken middleware
https://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>
如果您使用的是VueJ,则一切都已设置好
如果您仍想使用TokenGuard,则必须实施Passport的工作:以安全的方式从前端到后端来回传递和访问api令牌
答案 1 :(得分:0)
要添加到Alex的答案中,如果您想使用内置的token
防护,您要做的就是向用户表中添加api_token
列,如下所示:
$table->string('api_token', 60)->unique()->nullable()->default(null);
就是这样。现在,您只需使用auth:api
中间件,并通过请求正文中的a)作为api_token
或2)bearer token
标头中的3)或{{1 }}标头。
如果要生成api令牌,只需添加一个为每个用户生成唯一的方法,如下所示:
PHP_AUTH_PW
或者您也可以使用Str::orderedUuid
就是这样。 public function generateApiKey(){
do {
$this->api_token = str_random(60);
} while($this->where('api_token', $this->api_token)->exists());
$this->save();
}
比Passport
防护要好,因为在token
防护中,API令牌几乎被存储为纯文本,并且没有过期的可能是不安全的。但是,如果您的用例需要简单性,这可能就是解决方法