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

Laravel如何通过api.php路由实现API登录与受限内容访问?

别用GET参数传密码!Laravel API认证的正确实现方式

首先得纠正你的误解:直接在GET参数里传邮箱和密码不仅完全不符合这个接口的认证逻辑,而且是极度危险的操作——明文敏感信息会被存在浏览器历史、服务器日志里,等于把账号密码裸奔给所有人看。

你贴的这段Laravel路由代码,用的是auth:api中间件,它默认采用的是令牌(Token)认证机制,完整流程是这样的:

1. 先通过登录接口获取认证令牌

你需要先搭建一个专门的登录接口(用POST请求,避免敏感信息暴露在URL中),用来验证用户的邮箱和密码,并返回一个专属令牌:

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

Route::post('/api/login', function(Request $request) {
    // 校验请求参数格式
    $credentials = $request->validate([
        'email' => 'required|email',
        'password' => 'required'
    ]);

    // 验证账号密码是否匹配
    if (Auth::attempt($credentials)) {
        $user = Auth::user();
        // 生成可返回给前端的明文API令牌
        $token = $user->createToken('MyAPIToken')->plainTextToken;
        return response()->json(['access_token' => $token]);
    }

    // 验证失败返回401未授权
    return response()->json(['message' => '账号或密码错误'], 401);
});

2. 携带令牌访问受限接口

拿到令牌后,每次请求/get_restricted_content时,需要把令牌放在HTTP请求头里,而不是GET参数中。标准的请求头格式是:

Authorization: Bearer 你的令牌字符串

举个curl请求的实际例子:

curl http://example.loc/api/get_restricted_content \
  -H "Authorization: Bearer abcdefghijklmnopqrstuvwxyz123456"

当请求到达服务器时,auth:api中间件会自动解析请求头里的Bearer令牌,验证它的有效性:

  • 如果令牌有效,就允许进入路由闭包,返回你看到的那串JSON内容;
  • 如果令牌无效、过期或者不存在,直接返回401 Unauthorized响应。

额外补充

  • Laravel的API令牌默认存储在personal_access_tokens数据表中,你可以通过$user->tokens管理用户的所有令牌,比如手动吊销过期或不再使用的令牌;
  • 令牌的有效期可以在config/auth.php的tokens.expiration配置项中设置,默认是长期有效;
  • 如果你想自定义认证逻辑,也可以扩展auth:api中间件,但无论如何都不建议用GET参数传密码这种不安全的方式。

内容的提问来源于stack exchange,提问作者Takeshi Tokugawa YD

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:36:53