Laravel 5.3 Passport - Vue 错误:评估表达式时出错

Posted

技术标签:

【中文标题】Laravel 5.3 Passport - Vue 错误:评估表达式时出错【英文标题】:Laravel 5.3 Passport - Vue error: Error when evaluating expression 【发布时间】:2017-01-11 22:10:47 【问题描述】:

这两天让我头疼。我最近将我的 laravel 应用程序更新到 5.3,在我拉入 Laravel/passport 的本地环境中。安装后,一切正常。

当我将此更新推送到生产服务器时,一切仍然正常,但 vue 在护照组件上抛出错误。我对 vue 还是很陌生,找不到是什么原因造成的。

我尝试的最后一件事是在生产服务器上重新安装 Laravel 和护照,这会导致相同的错误。当我将此安装推送到本地计算机时,一切正常。我猜这是某种依赖错误。

这些是错误:

[Vue warn]: Error when evaluating expression "token.scopes.length > 0": TypeError: Cannot read property 'length' of undefined (found in component: <passport-authorized-clients>)
[Vue warn]: Error when evaluating expression "token.client.name": TypeError: Cannot read property 'name' of undefined (found in component: <passport-authorized-clients>)
[Vue warn]: Error when evaluating expression "token.scopes.length > 0": TypeError: Cannot read property 'length' of undefined (found in component: <passport-authorized-clients>)
[Vue warn]: Error when evaluating expression "token.client.name": TypeError: Cannot read property 'name' of undefined (found in component: <passport-authorized-clients>)

有没有人遇到过同样的错误,我该如何解决?

编辑:我设法解决了这个问题。我将 php5.6 更新为 php7 并安装了以下 PHP 模块; libgmp-dev,php-gmp。当我再次进行全新安装时,npm 抱怨护照需要两个依赖项; mdanter/ecc 和 indigophp/hash-compat

【问题讨论】:

这里需要更多代码,但似乎您正在尝试绑定一些不存在的值(至少在 init 上)。您是否将令牌创建为空对象,然后再往下添加属性?您是否有任何元素试图在创建时访问此属性? 我刚刚想通了。 OAuth 服务器缺少一个 PHP 模块才能工作,我不知道为什么 composer require laravel/passport 没有给我任何错误。但是在我安装 PHP 模块之后,节点给了我另一个错误,它需要 mdanter/ecc and indigophp/hash-compat 才能正常工作。 在我看来,这似乎是一个客户端问题vuejs/vue-resource#317 【参考方案1】:

我也遇到了同样的问题。解决方案here 帮助了我。它建议将以下内容添加到resources/assets/js/bootstrap.js

Vue.http.interceptors.push((request, next ) => 
    next((response) => 
        if( 'Content-Type' in response.headers 
            && response.headers['Content-Type'] == 'application/json' )
            if( typeof response.data != 'object' )
                response.data = JSON.parse( response.data );
            
        

        if( 'content-type' in response.headers
            && response.headers['content-type'] == 'application/json' )
            if( typeof response.data != 'object' )
                response.data = JSON.parse( response.data );
            
        
    );
);

【讨论】:

以上是关于Laravel 5.3 Passport - Vue 错误:评估表达式时出错的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.3 中未显示 Passport 组件

如何使用 Laravel Passport (5.3) 记录身份验证尝试

Laravel 5.3 Passport API 在 Postman 中使用个人访问令牌未经身份验证

在 Laravel 5.3 Passport 中添加 Access-Control-Allow-Origin 标头响应

Laravel 5.3 个人访问令牌 500

护照身份验证在 laravel 5.3 中不起作用