如何在Laravel 5.6中通过浏览器从api基础项目读取

时间:2018-10-06 15:57:45

标签: laravel api

我可以使用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来使用项目的前端。

我该怎么办?

2 个答案:

答案 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令牌几乎被存储为纯文本,并且没有过期的可能是不安全的。但是,如果您的用例需要简单性,这可能就是解决方法