Vuejs2 如何使用带有Laravel后端的完整堆栈Vue前端登录/注销
我夜以继日地试图在同一台服务器上使用Laravel后端实现一个完整的Vue前端。我可以用axios很好地完成正常的资源请求;然而,登录和注销有点像噩梦!我已经用尽了我的想法,真的需要一些帮助:) 以下是我的登录Vue组件:Vuejs2 如何使用带有Laravel后端的完整堆栈Vue前端登录/注销,vuejs2,vuex,laravel-5.8,Vuejs2,Vuex,Laravel 5.8,我夜以继日地试图在同一台服务器上使用Laravel后端实现一个完整的Vue前端。我可以用axios很好地完成正常的资源请求;然而,登录和注销有点像噩梦!我已经用尽了我的想法,真的需要一些帮助:) 以下是我的登录Vue组件: <div class="container"> <div class="row justify-content-center"> <div class="col-md-8"> <div clas
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">Login</div>
<div class="card-body">
<form>
<div class="form-group row">
<label for="email" class="col-md-4 col-form-label text-md-right">E-Mail Address</label>
<div class="col-md-6">
<input id="email" type="email" class="form-control" name="email" required autocomplete="email" autofocus v-model="email">
<!-- <span class="invalid-feedback" role="alert">
<strong>message</strong>
</span> -->
</div>
</div>
<div class="form-group row">
<label for="password" class="col-md-4 col-form-label text-md-right">Password</label>
<div class="col-md-6">
<input id="password" type="password" class="form-control" name="password" required autocomplete="current-password" v-model="password">
<!-- <span class="invalid-feedback" role="alert">
<strong>message</strong>
</span> -->
</div>
</div>
<div class="form-group row">
<div class="col-md-6 offset-md-4">
<div class="form-check">
<input class="form-check-input" type="checkbox" name="remember" id="remember" v-model="remember">
<label class="form-check-label" for="remember">
Remember Me
</label>
</div>
</div>
</div>
<div class="form-group row mb-0">
<div class="col-md-8 offset-md-4">
<button @click.prevent="login" class="btn btn-primary">
Login
</button>
<a class="btn btn-link" href="">
Forgot Your Password?
</a>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
email: null,
password: null,
remember: null,
loading: false
}
},
methods: {
login() {
window.axios.post('login', {
email: this.email, password: this.password
})
.then(response => {
console.log('Login fired!')
console.log(response.data)
})
.catch(error => {
console.log(error)
})
},
},
}
</script>
这是我的app.js:
window.axios = require('axios');
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
window.axios.defaults.baseURL = 'http://localhost:8000/api/';
let token = document.head.querySelector('meta[name="csrf-token"]');
if (token) {
window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
} else {
console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
}
import './bootstrap'
import Vue from 'vue'
import VueRouter from 'vue-router'
import store from './store/store'
import routes from './routes'
import App from './App.vue'
Vue.use(VueRouter);
const router = new VueRouter({
mode: 'history',
routes
})
const app = new Vue({
el: '#app',
router,
store,
render: h => h(App)
});
现在在后端,我将“authenticated”和“loggedOut”方法拉入我的登录控制器,并返回一些json:
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/home';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
/**
* The user has been authenticated.
*
* @param \Illuminate\Http\Request $request
* @param mixed $user
* @return mixed
*/
protected function authenticated(Request $request, $user)
{
return response()->json('You have successfully logged in', 200);
}
/**
* The user has logged out of the application.
*
* @param \Illuminate\Http\Request $request
* @return mixed
*/
protected function loggedOut(Request $request)
{
return response()->json('You have logged out now.', 200);
}
}
这是我的Vue路由器:
{ path: '/login', component: LoginPage },
{ path: '/register', component: RegisterPage },
首先在表格中添加
然后单击submit按钮提交并调用vuejs方法部分中的登录方法
登录
在vuejs组件方法中,我将
document.getElementById(“登录表单”).submit();
如果您使用的是Laravel 6,那么web.php中routes.php下将有Auth::routes()。您的登录和注销请求将通过trhough Auth::routes()处理。无需向vuejs路由器添加路由,也无需在api.php中处理这些请求。注销方法的调用方式与此相同
// Authentication Routes...
Route::post('api/login', 'Auth\LoginController@login');
Route::post('api/logout', 'Auth\LoginController@logout')->name('logout');
// Registration Routes...
Route::post('register', 'Auth\RegisterController@register');
Route::get('{any?}', function () {
return view('index');
// });
// })->where('any', '^(?!api).*$');
})->where('any', '.*');
{ path: '/login', component: LoginPage },
{ path: '/register', component: RegisterPage },