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

在已有Laravel登录系统中添加Microsoft 365登录选项

在已有Laravel登录系统中添加Microsoft 365登录选项

不用新建用户表,只需基于现有users表扩展,以下是完整实现步骤:

1. Azure门户注册应用

  • 登录Azure门户,进入「Azure Active Directory」→「应用注册」→「新注册」
  • 填写应用名称,选择支持的账户类型(选「任何组织目录中的账户和个人Microsoft账户」适配365和个人账号,或仅选组织账户)
  • 设置重定向URI:https://你的域名/login/microsoft/callback(需和后续Laravel配置一致)
  • 注册完成后,记录客户端ID、客户端密钥(在「证书和密码」中生成)、租户ID(应用概述页获取,若选任何账户类型可填common)

2. 安装依赖

使用Laravel Socialite的Microsoft扩展包:

composer require socialiteproviders/microsoft

3. 配置Socialite

3.1 注册事件监听

在app/Providers/EventServiceProvider.php的$listen数组中添加:

protected $listen = [
    \SocialiteProviders\Manager\SocialiteWasCalled::class => [
        \SocialiteProviders\Microsoft\MicrosoftExtendSocialite::class.'@handle',
    ],
];

3.2 配置服务参数

在config/services.php末尾添加Microsoft配置:

'microsoft' => [
    'client_id' => env('MICROSOFT_CLIENT_ID'),
    'client_secret' => env('MICROSOFT_CLIENT_SECRET'),
    'redirect' => env('MICROSOFT_REDIRECT_URI'),
    'tenant' => env('MICROSOFT_TENANT_ID'),
],

3.3 配置环境变量

在.env文件中添加:

MICROSOFT_CLIENT_ID=你的Azure客户端ID
MICROSOFT_CLIENT_SECRET=你的Azure客户端密钥
MICROSOFT_TENANT_ID=common # 或你的组织租户ID
MICROSOFT_REDIRECT_URI=https://你的域名/login/microsoft/callback

4. 扩展现有用户表(可选但推荐)

为了关联Microsoft账号与现有用户,给users表添加microsoft_id字段:

php artisan make:migration add_microsoft_id_to_users_table

打开生成的迁移文件,修改为:

public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->string('microsoft_id')->nullable()->unique();
    });
}

public function down()
{
    Schema::table('users', function (Blueprint $table) {
        $table->dropColumn('microsoft_id');
    });
}

执行迁移:

php artisan migrate

5. 添加路由

在routes/web.php中添加登录跳转和回调路由:

Route::get('/login/microsoft', [App\Http\Controllers\Auth\LoginController::class, 'redirectToMicrosoft'])->name('login.microsoft');
Route::get('/login/microsoft/callback', [App\Http\Controllers\Auth\LoginController::class, 'handleMicrosoftCallback']);

6. 实现登录逻辑

修改app/Http/Controllers/Auth/LoginController.php,添加以下方法:

use Laravel\Socialite\Facades\Socialite;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
use App\Models\User;

public function redirectToMicrosoft()
{
    return Socialite::driver('microsoft')->redirect();
}

public function handleMicrosoftCallback()
{
    try {
        $microsoftUser = Socialite::driver('microsoft')->user();
    } catch (\Exception $e) {
        return redirect()->route('login')->with('error', 'Microsoft登录失败,请稍后重试');
    }

    // 按邮箱查找现有用户
    $user = User::where('email', $microsoftUser->getEmail())->first();

    if (!$user) {
        // 无对应用户则自动创建(密码生成随机字符串,不影响后续登录)
        $user = User::create([
            'name' => $microsoftUser->getName(),
            'email' => $microsoftUser->getEmail(),
            'password' => Hash::make(Str::random(16)),
            'microsoft_id' => $microsoftUser->getId(),
        ]);
    } else {
        // 若用户已存在但未关联Microsoft账号,更新关联ID
        if (!$user->microsoft_id) {
            $user->update(['microsoft_id' => $microsoftUser->getId()]);
        }
    }

    // 登录用户并跳转至预设页面
    Auth::login($user);
    return redirect()->intended('/dashboard');
}

7. 前端添加登录按钮

在登录页面(如resources/views/auth/login.blade.php)中添加Microsoft登录按钮:

<div class="mt-4">
    <a href="{{ route('login.microsoft') }}" class="btn btn-block btn-outline-primary">
        用Microsoft 365账号登录
    </a>
</div>

这样就完成了新增登录方式的配置,用户既可以用原有账号密码登录,也可以通过Microsoft 365账号快速登录,完全复用现有用户表,无需重构原有登录系统。

内容的提问来源于stack exchange,提问作者Omar Mohamed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 13:53:24