Laravel 未仅与访客用户一起定义

Posted

技术标签:

【中文标题】Laravel 未仅与访客用户一起定义【英文标题】:Laravel is not defined Only with Guest User 【发布时间】:2018-03-20 12:31:54 【问题描述】:

我将为视频频道模型设置订阅系统。我使用 Vuejs 和 laravel 5.3

在我的刀片模板中,我放了这个

    <script>
   window.Laravel = <?php echo json_encode([
        'csrfToken' => csrf_token(),
    ]); ?>
    <script>

在身份验证模式下一切正常(当用户登录时),但在访客模式下,我的 vuejs 组件不起作用,我在控制台中得到了这个

ReferenceError: Laravel is not defined

截图 https://image.ibb.co/bPJCWG/laravel_Vuejs_Error_Guest.jpg 订阅人数消失,没有任何效果

这是我的代码:

控制器:

public function show(Request $request, Channel $channel)

    $response = [
        'count' => $channel->subscriptionCount(),
        'user_subscribed' => false,
        'can_subscribe' => false,
    ];

    if($request->user())
    
        $response = array_merge($response, [
            'user_subscribed' => $request->user()->isSubscribedTo($channel),
            'can_subscribe' => !$request->user()->ownsChannel($channel),
        ]);
    

    return response()->json([
        'data' => $response
    ], 200);

SubscribeButton.vue 组件:

<script>
export default 
    data () 
        return 
            //...
        
    ,
    props: 
        //...
    ,
    methods: 
        getSubscriptionStatus () 
            this.$http.get('/subscription/' + this.channelSlug).then((response) => 
                this.subscribers = response.body.data.count;
                this.userSubscribed = response.body.data.user_subscribed;
                this.canSubscribe = response.body.data.can_subscribe;
            )
        
    ,
    mounted () 
        this.getSubscriptionStatus();
    

请帮忙!

【问题讨论】:

【参考方案1】:

这是因为csrf 仅适用于经过身份验证的用户。您需要更改 javascript 部分以考虑匿名用户,例如:

@if (Auth::check())

//你的window.laravel js在这里

@endif

【讨论】:

感谢阿里,不幸的是它并没有解决问题。视频播放器是使用 vuejs 和 videojs 设置的。它在访客模式下工作正常。但只有订阅组件给我这个错误。我不明白

以上是关于Laravel 未仅与访客用户一起定义的主要内容,如果未能解决你的问题,请参考以下文章

laraver框架学习------工厂模型填充测试数据

Laravel,访客和用户的公共页面,会话表 user_id null

将 Laravel Blade 模板与 Vue JS 和事件监听器一起使用

Laravel Echo - 允许访客连接到出席频道

如何在 Laravel 中仅向访客用户显示或隐藏我的表的一部分?

为啥 distinct 不能与 Laravel + Postgresql 一起使用?