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

Laravel如何仅使用单个模型字段实现身份认证?

在Laravel中使用单个AuthKey字段实现身份认证

下面是实现仅通过auth_key字段完成用户认证的具体步骤,以Laravel 8+版本为例:

1. 准备数据库与模型

首先确保你的users表包含auth_key字段(建议添加唯一索引避免重复),同时在User模型中把该字段加入$fillable数组:

// app/Models/User.php
class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;

    protected $fillable = [
        'name',
        'email',
        'auth_key', // 加入此字段
        // 其他业务字段...
    ];

    // 若不想在接口响应中返回auth_key,可加入hidden数组
    protected $hidden = [
        'auth_key',
        // 其他敏感字段...
    ];
}

2. 自定义登录控制器逻辑

修改App/Http/Controllers/Auth/LoginController.php,重写默认认证逻辑,去掉密码验证环节:

// app/Http/Controllers/Auth/LoginController.php
namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;

class LoginController extends Controller
{
    use AuthenticatesUsers;

    // 指定认证使用的字段为auth_key
    public function username()
    {
        return 'auth_key';
    }

    // 重写登录验证规则,仅校验auth_key必填
    protected function validateLogin(Request $request)
    {
        $request->validate([
            $this->username() => 'required|string',
        ]);
    }

    // 重写登录尝试逻辑,无需密码验证
    protected function attemptLogin(Request $request)
    {
        $user = \App\Models\User::where($this->username(), $request->input($this->username()))->first();

        if ($user) {
            $this->guard()->login($user, $request->has('remember'));
            return true;
        }

        return false;
    }

    // 登录成功后的跳转路径(可根据业务需求修改)
    protected function redirectTo()
    {
        return '/dashboard';
    }
}

3. 修改登录视图

找到默认登录视图文件(通常在resources/views/auth/login.blade.php),替换表单内容,只保留auth_key输入框:

<form method="POST" action="{{ route('login') }}">
    @csrf

    <div class="form-group">
        <label for="auth_key">认证密钥</label>
        <input id="auth_key" type="text" class="form-control @error('auth_key') is-invalid @enderror" name="auth_key" value="{{ old('auth_key') }}" required autocomplete="auth_key" autofocus>

        @error('auth_key')
            <span class="invalid-feedback" role="alert">
                <strong>{{ $message }}</strong>
            </span>
        @enderror
    </div>

    <div class="form-group">
        <div class="form-check">
            <input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}>

            <label class="form-check-label" for="remember">
                记住我
            </label>
        </div>
    </div>

    <div class="form-group mb-0">
        <button type="submit" class="btn btn-primary">
            登录
        </button>
    </div>
</form>

4. 测试认证流程

  1. 通过数据填充或手动在数据库中给某个用户设置唯一的auth_key值
  2. 访问登录页面,输入该auth_key即可完成认证

注意事项

  • 务必保证auth_key字段在数据库中是唯一的,避免多用户共用同一密钥导致认证混乱
  • 若为API认证场景,可参考上述逻辑自定义API守卫,无需依赖session相关逻辑

内容的提问来源于stack exchange,提问作者Achraf Hebboul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 10:45:19