Laravel Websanova / Vue-Auth登录/注册返回未定义的URL

时间:2019-07-10 03:08:50

标签: laravel authentication vue.js single-page-application middleware

因此,我正在学习如何使用Laravel&Vue.js创建单页应用程序,并且找到了tutorial。我遵循了所有内容,没有进行任何更改,但是每次登录/注册时,我都会一直保持未定义状态

我已经三倍检查了所有内容。

显示http://127.0.0.1:8080/undefined/api/auth/login的图片- https://imgur.com/LfpiMvS

代码如下:

Auth.js

import bearer from '@websanova/vue-auth/drivers/auth/bearer'
import axios from '@websanova/vue-auth/drivers/http/axios.1.x'
import router from '@websanova/vue-auth/drivers/router/vue-router.2.x'
// Auth base configuration some of this options
// can be override in method calls
const config = {
auth: bearer,
http: axios,
router: router,
tokenDefaultName: 'recipe-lists',
tokenStore: ['localStorage'],
rolesVar: 'role',
registerData: {url: "auth/register", method: 'POST', redirect: '/login'},
loginData: {url: "auth/login", method: 'POST', redirect: '/', fetchUser: true},
logoutData: {url: "auth/logout", method: 'POST', redirect: '/', makeRequest: true},
fetchData: {url: "auth/user", method: 'GET', enabled: true},
refreshData: {url: "auth/refresh", method: 'GET', enabled: true, interval: 30}
}
export default config

api.php

Route::prefix('auth')->group(function () {
Route::post('register', 'Auth\AuthController@register');
Route::post('login', 'Auth\AuthController@login');
Route::get('refresh', 'Auth\AuthController@refresh');
Route::group(['middleware' => 'auth:api'], function(){
Route::get('user', 'Auth\AuthController@user');
Route::post('logout', 'Auth\AuthController@logout');
});
});

login.vue

<script>
export default {
data() {
return {
email: null,
password: null,
has_error: false,
isProcessing: false,
}
},
methods: {
login() {
// Get the redirect object
this.isProcessing = true
var redirect = this.$auth.redirect()
this.$auth.login({
body: {
email: this.email,
password: this.password
},
success: function() {
// Handle Redirection
const redirectTo = redirect ? redirect.from.name : this.$auth.user().role === 2 ? 'admin.dashboard' : 'dashboard'
this.$router.push('/')
},
error: function() {
this.has_error = true
},
rememberMe: true,
fetchUser: true
})
}
}
}
</script>

有人可以向我解释一下这里的情况吧。

谢谢!

我希望网址为http://127.0.0.1:8080/api/auth/login

2 个答案:

答案 0 :(得分:3)

我在URL中的undefined部分遇到了类似的问题。

原因是我的MIX_APP_URL Laravel配置文件中没有设置.env变量。 ${process.env.MIX_APP_URL}的工作方式是Node可以在运行时注入环境变量,在这种情况下为应用程序url。

我们希望MIX_APP_URL中的.env的一个原因是,使用您的应用程序的任何开发人员都可以轻松地对其进行设置,而仅修改MIX_APP_URL变量。

另一个非常重要的原因是,URL 对于本地服务器和生产环境将有所不同-在这种情况下,将其更改为静态URL的解决方案将不起作用,并且容易生产环境中的错误。

需要注意的一点是,在运行NPM watch任务时,.env变量的更改不会立即生效,watch任务必须重新启动< / strong>。

答案 1 :(得分:0)

原来我的错误是来自我的 app.js ,代码是:

abcd

将其更改为:

axios.defaults.baseURL = `${process.env.MIX_APP_URL}/api`

成功了,未定义的东西现在消失了。我不知道为什么第一个不起作用,而是吧。

Reddit用户/ u / mrcat323帮助我在/ r / vuejs中获得了答案。