You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 9 Nwidart模块中如何实现独立登录注册功能?

为nWidart Laravel模块实现独立登录注册(Laravel 9)

1. 创建模块专属用户模型与数据库迁移

首先生成Agent模块的用户模型和对应的迁移文件:

php artisan module:make-model AgentUser Agent

打开模块迁移文件(Modules/Agent/Database/Migrations/xxxx_xx_xx_create_agent_users_table.php),补充用户表字段:

public function up()
{
    Schema::create('agent_users', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->string('email')->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    });
}

执行模块迁移:

php artisan module:migrate Agent

2. 在根配置中添加专属认证Guard与Provider

打开项目根目录的config/auth.php,在guards数组里添加Agent专属Guard:

'guards' => [
    // ... 原有配置
    'agent' => [
        'driver' => 'session',
        'provider' => 'agents',
    ],
],

接着在providers数组里添加对应的数据提供者:

'providers' => [
    // ... 原有配置
    'agents' => [
        'driver' => 'eloquent',
        'model' => Modules\Agent\Models\AgentUser::class,
    ],
],

3. 编写模块内的认证控制器

生成登录与注册控制器:

php artisan module:make-controller Auth/AgentLoginController Agent
php artisan module:make-controller Auth/AgentRegisterController Agent

登录控制器逻辑(Modules/Agent/Http/Controllers/Auth/AgentLoginController.php)

namespace Modules\Agent\Http\Controllers\Auth;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;

class AgentLoginController extends Controller
{
    public function showLoginForm()
    {
        return view('agent::auth.login');
    }

    public function login(Request $request)
    {
        $request->validate([
            'email' => 'required|email',
            'password' => 'required|string',
        ]);

        if (Auth::guard('agent')->attempt($request->only('email', 'password'), $request->filled('remember'))) {
            $request->session()->regenerate();
            return redirect()->intended(route('agent.dashboard'));
        }

        return back()->withErrors([
            'email' => '邮箱或密码错误,请重新输入',
        ])->onlyInput('email');
    }

    public function logout(Request $request)
    {
        Auth::guard('agent')->logout();
        $request->session()->invalidate();
        $request->session()->regenerateToken();
        return redirect('/agent/login');
    }
}

注册控制器逻辑(Modules/Agent/Http/Controllers/Auth/AgentRegisterController.php)

namespace Modules\Agent\Http\Controllers\Auth;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Modules\Agent\Models\AgentUser;

class AgentRegisterController extends Controller
{
    public function showRegistrationForm()
    {
        return view('agent::auth.register');
    }

    public function store(Request $request)
    {
        $validated = $request->validate([
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:agent_users',
            'password' => 'required|string|min:8|confirmed',
        ]);

        $user = AgentUser::create([
            'name' => $validated['name'],
            'email' => $validated['email'],
            'password' => Hash::make($validated['password']),
        ]);

        Auth::guard('agent')->login($user);
        return redirect()->route('agent.dashboard');
    }
}

4. 配置模块专属路由

打开Modules/Agent/Routes/web.php,添加认证与面板路由:

use Illuminate\Support\Facades\Route;
use Modules\Agent\Http\Controllers\Auth\AgentLoginController;
use Modules\Agent\Http\Controllers\Auth\AgentRegisterController;
use Modules\Agent\Http\Controllers\AgentDashboardController;

// 认证路由
Route::get('/agent/login', [AgentLoginController::class, 'showLoginForm'])->name('agent.login');
Route::post('/agent/login', [AgentLoginController::class, 'login']);
Route::post('/agent/logout', [AgentLoginController::class, 'logout'])->name('agent.logout');

Route::get('/agent/register', [AgentRegisterController::class, 'showRegistrationForm'])->name('agent.register');
Route::post('/agent/register', [AgentRegisterController::class, 'store']);

// Agent专属面板(需认证)
Route::middleware('auth:agent')->group(function () {
    Route::get('/agent/dashboard', [AgentDashboardController::class, 'index'])->name('agent.dashboard');
});

5. 创建认证与面板视图

在Modules/Agent/Resources/Views/下创建对应视图:

  • auth/login.blade.php:编写登录表单
  • auth/register.blade.php:编写注册表单
  • dashboard.blade.php:Agent专属面板页面

示例登录表单片段:

<form method="POST" action="{{ route('agent.login') }}">
    @csrf
    <div>
        <label for="email">邮箱</label>
        <input id="email" type="email" name="email" value="{{ old('email') }}" required autofocus>
        @error('email')
            <span>{{ $message }}</span>
        @enderror
    </div>
    <div>
        <label for="password">密码</label>
        <input id="password" type="password" name="password" required>
        @error('password')
            <span>{{ $message }}</span>
        @enderror
    </div>
    <div>
        <input type="checkbox" name="remember" id="remember">
        <label for="remember">记住我</label>
    </div>
    <div>
        <button type="submit">登录</button>
    </div>
</form>

内容的提问来源于stack exchange,提问作者Brijesh Chauhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 10:17:47