当前位置:首页 > 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 请求:

laravel vue实现登录

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

laravel vue实现登录

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 中间件。

标签: laravelvue
分享给朋友:

相关文章

vue实现评论编辑

vue实现评论编辑

Vue 实现评论编辑功能 数据绑定与表单结构 使用 v-model 双向绑定评论内容到表单输入框,确保编辑时能显示原内容并同步修改。示例模板结构: <template> <di…

vue 实现闪烁

vue 实现闪烁

Vue 实现闪烁效果的方法 方法一:使用 CSS 动画 在 Vue 组件中定义一个闪烁的 CSS 动画,通过绑定 class 或 style 来控制元素的闪烁效果。 <template>…

vue实现grid

vue实现grid

Vue 实现 Grid 布局的方法 使用 CSS Grid 布局 Vue 可以结合 CSS Grid 布局实现灵活的网格系统。CSS Grid 是现代浏览器原生支持的布局方案,无需额外依赖库。 &l…

vue实现标签

vue实现标签

Vue 实现标签的方法 在 Vue 中实现标签功能可以通过多种方式完成,以下是几种常见的方法: 使用动态组件 动态组件可以根据不同的条件渲染不同的标签内容。通过 :is 属性动态绑定组件名,实现标签…

vue toast实现

vue toast实现

Vue Toast 实现方法 使用第三方库(推荐) 安装 vue-toastification 库,这是一个功能丰富且轻量级的 Vue Toast 插件。 npm install vue-toas…

vue实现展开

vue实现展开

展开功能的实现方法 在Vue中实现展开功能可以通过多种方式完成,常见的有使用v-show、v-if指令,结合CSS过渡动画或第三方组件库。 使用v-show控制显示隐藏 通过v-show指令可以简单…