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

如何通过基础HTML表单访问Laravel Sanctum API?

如何通过基础HTML表单访问Laravel Sanctum API?

嘿,我看到你用Postman调用Sanctum API完全没问题,但想切换到基础HTML表单来访问对吧?别担心,我来一步步帮你搞定这件事~

首先得明确:Postman是直接带Token请求API,但HTML表单是通过Cookie会话来和Sanctum做认证的,所以我们需要调整一些配置和表单写法:

1. 先搞定Sanctum的基础配置

1.1 配置状态域

打开config/sanctum.php,找到stateful数组,把你的前端域名(本地开发一般是localhost:8000或者你用的端口)加进去,比如:

'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
    '%s%s',
    'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1',
    env('APP_URL') ? ','.parse_url(env('APP_URL'), PHP_URL_HOST) : ''
))),

如果是本地开发,确保localhost:8000在列表里就行。

1.2 调整SESSION和CORS配置

  • 在.env文件里设置SESSION_DOMAIN=localhost(和你的前端域名一致)
  • 打开config/cors.php,把supports_credentials改成true,这样浏览器会允许携带Cookie跨域请求。

2. 编写HTML登录表单

你已经有了login-user的API路由,现在写一个HTML表单指向它,关键是要带上CSRF令牌(Laravel的防跨站请求伪造机制要求的):

<!DOCTYPE html>
<html>
<head>
    <title>登录访问Sanctum API</title>
    <!-- 先引入CSRF令牌的meta标签,方便后续表单使用 -->
    <meta name="csrf-token" content="{{ csrf_token() }}">
</head>
<body>
    <h3>用户登录</h3>
    <form method="POST" action="/api/login-user">
        <!-- 自动生成CSRF令牌字段 -->
        @csrf
        <div>
            <label>邮箱:</label>
            <input type="email" name="email" required>
        </div>
        <div>
            <label>密码:</label>
            <input type="password" name="password" required>
        </div>
        <button type="submit">登录</button>
    </form>
</body>
</html>

登录成功后,Laravel会在浏览器里设置一个Session Cookie,之后的请求就会自动带上这个Cookie来通过auth:sanctum的验证。

3. 编写访问受保护API的表单

现在你可以写表单来访问需要认证的POI接口了:

获取POI列表(GET请求)

<form method="GET" action="/api/poi">
    <button type="submit">获取POI列表</button>
</form>

提交后,浏览器会自动带上登录后的Session Cookie,就能拿到POI的JSON数据了。

新增POI(POST请求)

<h3>新增POI</h3>
<form method="POST" action="/api/store">
    @csrf
    <div>
        <label>POI名称:</label>
        <input type="text" name="name" required>
    </div>
    <div>
        <label>POI描述:</label>
        <textarea name="description" required></textarea>
    </div>
    <button type="submit">保存POI</button>
</form>

注意POST请求必须带上@csrf字段,不然会被Laravel拒绝。

4. 额外注意事项

  • 如果你是在纯静态HTML文件里写表单(不是Laravel的Blade模板),那没法用@csrf,这时候需要手动获取CSRF令牌:可以先访问Laravel的/csrf-cookie路由,然后从响应的Cookie里取XSRF-TOKEN,再把它作为X-XSRF-TOKEN请求头或者表单的_token字段提交。
  • 登录成功后,只要浏览器不清除Cookie,后续的表单请求都会自动带上认证信息,不需要手动加Token。

备注:内容来源于stack exchange,提问作者mas budi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 14:24:37