【问题标题】:What is the proper way to validate user password confirmed input using Laravel lighthouse使用 Laravel lighthouse 验证用户密码确认输入的正确方法是什么
【发布时间】:2021-05-21 12:29:29
【问题描述】:

我正在使用 lighthouse 库为我的 Laravel 项目开发 GraphQL 模式。但是在尝试验证用户确认密码时遇到了问题。当我尝试注册用户时会出现此问题。为我的用户考虑以下类型

type User {
    id: ID
    first_name: String!
    last_name: String!
    email: String!
    password: String!
    phone_number: String
    avatar: String
    email_verified_at: DateTime
}

我尝试使用以下突变注册我的用户

extend type Mutation {
    createUser(input: CreateUser @spread): User! @create
}

我的 CreateUser 输入如下所示

input CreateUser {
    first_name: String!
    last_name: String!
    email: String! @rules(apply: ["email"])
    password: String! @rules(apply: ["confirmed"])
    phone_number: String
}

我收到验证失败的预期错误:“字段 [createUser] 验证失败”,这很好。但是当我尝试在我的请求中添加password_confirmation 时,会遇到以下错误:"Field \"password_confirmation\" is not defined by type CreateUser."。那是我想我应该将password_confirmation 字段添加到 CreateUser 输入的时候。但是当我尝试验证通过但我得到一个数据库错误,password_confirmation 是一个未定义的列。这是有道理的,因为它不在我的迁移中,而且我认为验证密码不应该是必需的。

tldr;如何在 lighthouse @rules 指令中使用 laravel confirmed 验证

【问题讨论】:

  • 这是个好问题。我想知道自己。期待答案。也许解决方法是same:password 规则? laravel.com/docs/8.x/validation#rule-same
  • 那是否还需要我将 password_confirmation 添加到我的迁移中?
  • 没必要,我猜。您可以使用验证器:lighthouse-php.com/5.2/security/…
  • 这听起来很有希望,我今天晚些时候试试。猜猜我会专注于使用 @rules 指令
  • 这仍然是一个好问题。我的理解是,当应用确认规则时,Lighthouse 应该自动为客户端提供另一个属性。我不确定这样的事情是否已经实施。否则这将是一个非常好的功能请求!

标签: laravel laravel-lighthouse


【解决方案1】:

可以覆盖User模型的fill函数并手动取消设置password_confirmation属性:

public function fill(array $attributes)
{
    unset($attributes['password_confirmation']);
    return parent::fill($attributes);
}

验证将运行,password_confirmation 字段将在保存模型之前取消设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    相关资源
    最近更新 更多