首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >vuejs组件中如何使用laravel令牌

vuejs组件中如何使用laravel令牌
EN

Stack Overflow用户
提问于 2017-06-14 12:49:29
回答 1查看 1.5K关注 0票数 1

我试图在vue组件中使用一个表单。问题是它不接受我的csrf令牌。我尝试以多种方式添加它,使用

代码语言:javascript
运行
复制
{{!! csrf_field()!!}} // the component does not render after this

然后我尝试添加xcsrf

代码语言:javascript
运行
复制
blade.php


>meta name="csrf-token" content="{{ csrf_token() }}">

然后将其添加到脚本中

代码语言:javascript
运行
复制
 $.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
}); //this gives error token mismatch

然后,我尝试将xcsrf添加到挂载函数中,如下所示

代码语言:javascript
运行
复制
mounted() {
        this.csrf = window.laravel.csrfToken        
    } // I get the error csrfToken of undefined

这是我的代码app.js

代码语言:javascript
运行
复制
//new vue component 
Vue.component('search', require('./components/Searchnames.vue'));

component.vue

代码语言:javascript
运行
复制
<template>
    <div class="row">
        <form class="col-md-12" action='/table' method="POST">

        <input type="hidden" name="_token" :value="csrf">
            <h1 class="mainheading">
                I have found the following names matching your search
            </h1>
            <br/>
            <br/>
            <br/>
            <div class='names_container' v-for="name in names">
                <button class=" btn-default btn-block glow-border names" type='submit' v-on:click="getName">
                {{name.label.eng}}
                </button>

            </div>

        </form>
    </div>

</template>


<script>
  export default {
        data: function () {
            return {
                names: [],
                selected: "",
                csrf: ""
            };

        },
        methods: {
            getData: function () {
                let self = this;
                self.$http.jsonp(url, {
                        jsonpCallback: "JSON_CALLBACK"
                    })
                    .then(response => {
                        response.body.map(function (obj) {
                            if (obj.type == 'org') {
                                self.names.push(obj)
                            }

                        });
                        console.log(JSON.stringify(this.names))
                    })
            },
            getName: function (element) {
                this.selected = element.target.innerText
            }
        },
        mounted: function () {
            this.csrf = window.laravel.csrfToken ;
            this.getData();


        }
    }
</script>

blade.php模板

代码语言:javascript
运行
复制
@section('content')
     <div>
         <search></search>
         </div>   
    @endsection

    <script>
        var url = '{{ $url }}'.replace(/&amp;/g, '&');
    </script>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-14 12:53:30

尝尝这个

代码语言:javascript
运行
复制
Vue.http.interceptors.push(function (request, next) {
request.headers['X-CSRF-TOKEN'] = Laravel.csrfToken;
next();
});

然后尝试这个,或者将它添加到您的app.blade.php头中:

代码语言:javascript
运行
复制
<script>
    window.Laravel = <?php echo json_encode([
        'csrfToken' => csrf_token(),
    ]); ?>
</script>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44545302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档