Laravel+Vue 前后端分离

2017-02-22 12:30:13 +08:00
 linkbg

目前实践一个项目。有些小问题。可能想法错了,还望大家指点一下。 目录结构:

---vue-laravel
  |
  | ---- client #这是纯的 vue 目录
  | ---- server #laravel 放在这里

laravel 提供 api 并且通过 CORS 解决跨域的问题。

目前认证这块是正常的。

但是我想把注册的模块也通过 vue 来实现页面展示, laravel 来存入数据库。但是,我使用 CORS 来提交数据会报 422 的错误。好像应该我没有把 CSRF 值传入的问题。

代码如下: vue 提交注册数据

handleRegisterFormSubmit () {
        const postData = {
          grant_type: 'client_credentials',
          client_id: clientId,
          client_secret: clientSecret,
          email: this.register.email,
          password: this.register.password,
          password_confirmation: this.register.password_confirmation,
          name: this.register.name,
          scope: ''
        }
        this.$http.post('http://localhost:8000/api/register', postData)
          .then(response => {
            console.log(response)
          })
      }

laravel Api 路由:

Route::post('/register',"Auth\RegisterController@register");

请问应该怎么来处理这种没有认证之前的前后端数据交互呢?谢谢

12670 次点击
所在节点    PHP
21 条回复
airycanon
2017-02-22 12:41:09 +08:00
Laravel 5.4 里面用的是 axios 发请求,原理如下:

把变量传到页面中:
```
<script>
window.Laravel = {!! json_encode([
'csrfToken' => csrf_token(),
]) !!};
</script>
```
在 axios 的 header 中设置 csrfToken :
```window.axios.defaults.headers.common = {
'X-CSRF-TOKEN': window.Laravel.csrfToken,
'X-Requested-With': 'XMLHttpRequest'
};
```
用 Vue 的话同理。
airycanon
2017-02-22 12:51:36 +08:00
不好意思,没看清是前后端分离,这样的话我只知道设置 CSRF 中间件的 $except ,可以排除掉某些路由,或者直接在 Http\Kernel.php 中禁用 CSRF 中间件了。
branchzero
2017-02-22 12:57:37 +08:00
你确定走了 api 的 middleware 了么,如果走 api 的 middleware 的话默认是不会启用 csrf check 的
linkbg
2017-02-22 14:28:50 +08:00
@branchzero 谢谢。但是新的问题是 401 但是我明明已经取得客户端授权了。请问这个怎么解决呢?我将新的情况补充在问题上。
ydxred
2017-02-22 14:32:40 +08:00
分离不是应该写在视图里面吗?
linkbg
2017-02-22 14:39:56 +08:00
@ydxred 视图这里完全交给 vue 。 laravel 的视图就不去写了。
coooooooode
2017-02-22 15:49:48 +08:00
和我想的一样,前端就只做前端的事,让 vue 控制数据与 api 调用。 支持!
jellybool
2017-02-22 16:11:59 +08:00
我觉得你阔以看看这个
jellybool
2017-02-22 16:12:37 +08:00
benbenlang
2017-02-22 18:15:56 +08:00
@jellybool 你的视频要付费啊,,,
jellybool
2017-02-22 19:03:48 +08:00
@benbenlang 是的
skyjerry
2017-02-22 19:16:54 +08:00
@jellybool 出示学生证可否优惠?学生,没什么钱
jellybool
2017-02-22 19:24:16 +08:00
@skyjerry 这个暂时没有,不好意思
linkbg
2017-02-22 21:31:22 +08:00
@jellybool 价格有点小贵了。但是能分享一下,您是这样写的吗?我新的附言。
sobigfish
2017-02-22 21:31:39 +08:00
linoder
2017-02-22 22:01:43 +08:00
都分离了 csrf 还有用么?
linkbg
2017-02-22 22:15:41 +08:00
scrf 没有用了。是传入 access_token 。
linkbg
2017-02-22 22:16:00 +08:00
scrf 没有用了。是传入 access_token 。

@linoder
yangqi
2017-02-22 22:45:00 +08:00
都前后端分离了,直接把 csrf 的 middleware 关掉就行了
crossmaya
2017-02-23 04:04:33 +08:00
一看就是 auth 中间件的问题!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/342281

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX