当前位置:首页 > VUE

laravel vue实现登录

2026-01-14 05:42:50VUE

使用 Laravel 和 Vue 实现登录功能

后端配置(Laravel)

确保 Laravel 已安装并配置好数据库连接。使用 Laravel 的 auth 脚手架生成默认的认证逻辑:

composer require laravel/ui
php artisan ui vue --auth
npm install && npm run dev
php artisan migrate

这会生成默认的登录、注册和密码重置视图及路由。后端 API 路由需在 routes/api.php 中定义:

use App\Http\Controllers\AuthController;

Route::post('/login', [AuthController::class, 'login']);

创建 AuthController 处理登录逻辑:

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class AuthController extends Controller
{
    public function login(Request $request)
    {
        $credentials = $request->validate([
            'email' => 'required|email',
            'password' => 'required',
        ]);

        if (Auth::attempt($credentials)) {
            $request->session()->regenerate();
            return response()->json(['message' => '登录成功']);
        }

        return response()->json(['message' => '认证失败'], 401);
    }
}

前端实现(Vue)

在 Vue 组件中创建登录表单并处理提交逻辑。安装 axios 用于发送 HTTP 请求:

npm install axios

创建 Login.vue 组件:

<template>
  <div>
    <form @submit.prevent="handleLogin">
      <input v-model="form.email" type="email" placeholder="邮箱" required>
      <input v-model="form.password" type="password" placeholder="密码" required>
      <button type="submit">登录</button>
    </form>
    <p v-if="error">{{ error }}</p>
  </div>
</template>

<script>
import axios from 'axios';

export default {
  data() {
    return {
      form: {
        email: '',
        password: ''
      },
      error: ''
    };
  },
  methods: {
    async handleLogin() {
      try {
        const response = await axios.post('/api/login', this.form);
        if (response.data.message === '登录成功') {
          window.location.href = '/home'; // 跳转到受保护页面
        }
      } catch (err) {
        this.error = err.response?.data?.message || '登录失败';
      }
    }
  }
};
</script>

跨域和会话配置

确保 Laravel 允许跨域请求和会话管理。在 config/cors.php 中设置:

'paths' => ['api/*'],
'allowed_methods' => ['*'],
'allowed_origins' => ['*'], // 生产环境应限制为具体域名
'allowed_headers' => ['*'],

.env 中配置会话驱动为 cookie

SESSION_DRIVER=cookie
SESSION_DOMAIN=yourdomain.com
SANCTUM_STATEFUL_DOMAINS=yourdomain.com

状态管理(可选)

如需全局管理用户状态,可使用 Vuex。安装并配置 Vuex:

npm install vuex

创建 store/auth.js

import axios from 'axios';

const state = {
  user: null,
};

const mutations = {
  SET_USER(state, user) {
    state.user = user;
  }
};

const actions = {
  async login({ commit }, credentials) {
    const response = await axios.post('/api/login', credentials);
    commit('SET_USER', response.data.user);
  }
};

export default {
  namespaced: true,
  state,
  mutations,
  actions
};

Login.vue 中通过 this.$store.dispatch('auth/login', this.form) 调用登录动作。

安全性增强

  • 使用 HTTPS 保护数据传输。
  • 实现 CSRF 保护:在 Blade 模板中添加 <meta name="csrf-token" content="{{ csrf_token() }}">,并通过 axios.defaults.headers.common['X-CSRF-TOKEN'] 设置请求头。
  • 限制登录尝试频率:Laravel 内置 ThrottleRequests 中间件。

laravel vue实现登录

标签: laravelvue
分享给朋友:

相关文章

vue实现密码

vue实现密码

Vue 密码输入组件实现 基础密码输入框实现 使用 Vue 的 v-model 指令绑定数据,并通过 type="password" 设置输入类型为密码: <template>…

vue页面分离的实现

vue页面分离的实现

Vue页面分离的实现方法 将Vue页面分离为多个组件或模块,有助于提升代码可维护性和复用性。以下是几种常见的实现方式: 组件化拆分 通过将页面拆分为多个子组件,每个组件负责特定功能或UI部分。使用…

在线脑图 vue 实现

在线脑图 vue 实现

在线脑图 Vue 实现方案 使用开源库实现 推荐使用 mind-elixir 或 jsmind 这类开源库,它们专为脑图设计且支持 Vue 集成。 安装依赖: npm install mi…

vue设计与实现目录

vue设计与实现目录

以下是《Vue设计与实现》一书的典型目录结构(根据常见技术书籍及Vue核心内容整理): 响应式系统 响应式数据的基本原理 依赖收集与触发更新 实现简易响应式系统 Proxy与Reflec…

vue使用vr实现标注

vue使用vr实现标注

Vue 中使用 VR 实现标注的方法 在 Vue 项目中结合 VR 技术实现标注功能,可以通过 WebXR 和 Three.js 等库实现。以下为具体实现方法: 安装依赖 确保项目中已安装 Thre…

vue实现关键词轮播

vue实现关键词轮播

Vue 实现关键词轮播 基础实现方案 使用 Vue 的 v-for 和 setInterval 实现基础轮播效果: <template> <div class="keyword…