首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在两个不同的前端和后端域名中使用Laravel Sanctum?

在两个不同的前端和后端域名中使用Laravel Sanctum,您需要进行以下步骤:

  1. 安装 Laravel Sanctum:在 Laravel 项目中执行以下命令安装 Laravel Sanctum 包:
代码语言:txt
复制
composer require laravel/sanctum
  1. 配置 Laravel Sanctum:在项目的 config/auth.php 文件中,将 api 守卫的驱动程序更改为 sanctum,如下所示:
代码语言:txt
复制
'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'sanctum',
        'provider' => 'users',
        'hash' => false,
    ],
],
  1. 生成 Sanctum 相关的数据库表:在 Laravel 项目中执行以下命令生成 Sanctum 相关的数据库迁移文件并执行迁移:
代码语言:txt
复制
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
php artisan migrate
  1. 配置 CORS:在 Laravel 项目中安装 fruitcake/laravel-cors 包,执行以下命令:
代码语言:txt
复制
composer require fruitcake/laravel-cors

然后,在 config/cors.php 文件中进行跨域配置,例如:

代码语言:txt
复制
return [
    'paths' => ['api/*'],
    'allowed_methods' => ['*'],
    'allowed_origins' => ['https://frontend-domain.com', 'https://backend-domain.com'],
    'allowed_origins_patterns' => [],
    'allowed_headers' => ['*'],
    'exposed_headers' => [],
    'max_age' => 0,
    'supports_credentials' => true,
];
  1. 创建前端和后端域名的路由:在前端域名和后端域名的路由文件中定义相应的路由,例如: 在前端域名中的路由文件:
代码语言:txt
复制
use Illuminate\Support\Facades\Http;

Route::get('/api/sanctum/csrf-cookie', function () {
    return Http::get('https://backend-domain.com/sanctum/csrf-cookie');
});

Route::post('/api/login', function () {
    $response = Http::post('https://backend-domain.com/login', [
        'email' => 'email@example.com',
        'password' => 'password',
    ]);

    return $response->json();
});

在后端域名中的路由文件:

代码语言:txt
复制
use App\Http\Controllers\AuthController;
use App\Http\Controllers\UserController;
use Illuminate\Support\Facades\Route;

Route::middleware('auth:sanctum')->group(function () {
    Route::get('/user', [UserController::class, 'index']);
});

Route::post('/login', [AuthController::class, 'login']);
  1. 在前端中使用 Sanctum 进行身份验证:在前端代码中,首先通过访问 /api/sanctum/csrf-cookie 路由获取 CSRF 令牌,然后使用令牌进行登录请求,例如:
代码语言:txt
复制
fetch('https://frontend-domain.com/api/sanctum/csrf-cookie', {
    credentials: 'include'
}).then(() => {
    fetch('https://frontend-domain.com/api/login', {
        method: 'POST',
        credentials: 'include',
        headers: {
            'Content-Type': 'application/json',
        },
        body: JSON.stringify({
            email: 'email@example.com',
            password: 'password',
        }),
    }).then(response => {
        if (response.ok) {
            // 登录成功
        } else {
            // 登录失败
        }
    });
});
  1. 在后端中使用 Sanctum 进行身份验证:在后端控制器中,使用 Sanctum 的 EnsureFrontendRequestsAreStateful 中间件来验证请求是否来自前端域名,例如:
代码语言:txt
复制
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' => 'Authenticated']);
        }

        return response()->json(['message' => 'Invalid credentials'], 401);
    }
}

这样,您就可以在两个不同的前端和后端域名中成功使用 Laravel Sanctum 进行身份验证了。请注意,以上示例仅供参考,您可能需要根据自己的具体项目结构和需求进行适当的调整。

关于 Laravel Sanctum 的更多信息,您可以参考腾讯云提供的 Laravel Sanctum 的产品文档链接:Laravel Sanctum 产品文档

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券