最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

内部服务器错误 500:Validator

网站源码admin57浏览0评论

内部服务器错误 500:Validator

内部服务器错误 500:Validator

我正在使用 AdonisJS 尝试使用 Inertia/Vue3 创建身份验证系统。

到目前为止,注册表一直有效,直到我将

rules.oneLowerCaseAtLeast()
添加到
UserValidators.ts
然后它会抛出错误。

状态代码:500 内部服务器错误

TypeError: Validator_1.rules.oneLowerCaseAtLeast 不是函数

这是堆栈错误

[21:40:20.895] ERROR (adonis-inertia-app/2500): Validator_1.rules.oneLowerCaseAtLeast is not a function
    err: {
      "type": "TypeError",
      "message": "Validator_1.rules.oneLowerCaseAtLeast is not a function",
      "stack":
          TypeError: Validator_1.rules.oneLowerCaseAtLeast is not a function
              at passwordRules (C:\Users\User\Projects\adonis-inertia-app\app\Validators\UserValidators.ts:17:11)
              at new CreateUserValidator (C:\Users\User\Projects\adonis-inertia-app\app\Validators\UserValidators.ts:81:45)
              at Request.validateRequest [as validate] (C:\Users\User\Projects\adonis-inertia-app\node_modules\@adonisjs\validator\build\src\Bindings\Request.js:22:65)
              at SignupController.submitSignupForm (C:\Users\User\Projects\adonis-inertia-app\app\Controllers\Http\SignupController.ts:18:35)
              at Injector.callAsync (C:\Users\User\Projects\adonis-inertia-app\node_modules\@adonisjs\fold\build\src\Ioc\Injector.js:124:30)
              at processTicksAndRejections (node:internal/process/task_queues:96:5)
      "status": 500
    }

控制器:

app\Controllers\Http\SignupController.ts

import { HttpContextContract } from "@ioc:Adonis/Core/HttpContext";
import { CreateUserValidator } from "App/Validators/UserValidators";
import UserService from "App/Services/UserService";
import User from "App/Models/User";
import VerificationProcedure from "App/Models/VerificationProcedure";
import starterConfig from "Config/starter";

export default class SignupController {
  public async signupForm({ inertia }: HttpContextContract) {
    return inertia.render('Register')
  }

  public async submitSignupForm({
    request,
    response,
    session,
  }: HttpContextContract) {
    const payload = await request.validate(CreateUserValidator);
    const user = await UserService.create(payload);

    if (!starterConfig.signup.verifyEmail) {
      session.flash({
        notification: "Your account has been created. You can log in.",
      });
      response.redirect(`/`);
    } else {
      session.put("tmpUser", user);
      response.redirect(`/signup/check-your-inbox`);
    }
  }

  public async checkYourInbox({
    view,
    session,
    response,
  }: HttpContextContract) {
    const user = session.get("tmpUser");
    if (!user) {
      return response.forbidden();
    }
    return view.render("pages/SignUpCheckYourInbox", {
      user: session.get("tmpUser"),
    });
  }

  public async verifyEmail({ view, params }: HttpContextContract) {
    const verificationProcedure = await VerificationProcedure.findOrFail(
      params.id
    );
    const user = await User.findOrFail(verificationProcedure.userId);
    user.blocked = false;
    user.emailVerified = true;
    await user.save();

    await verificationProcedure.delete();
    return view.render("pages/verifyEmail", {});
  }
}

验证者:

app\Validators\UserValidators.ts

import { schema, rules } from "@ioc:Adonis/Core/Validator";
import { HttpContextContract } from "@ioc:Adonis/Core/HttpContext";
import UserService from "App/Services/UserService";
const roleIds = UserService.allRolesExceptRoot().map((r) => r.id);

const PASSWORD_MIN_LENGTH = 1;
const PASSWORD_MAX_LENGTH = 255;

function emailRules() {
  return [rules.maxLength(255), rules.minLength(5), rules.email()];
}

export function passwordRules(confirm = true) {
  const passwordRules = [
    rules.minLength(PASSWORD_MIN_LENGTH),
    rules.maxLength(PASSWORD_MAX_LENGTH),
    rules.oneLowerCaseAtLeast(),
    // rules.oneNumericAtLeast(),
    // rules.oneUpperCaseAtLeast(),
    // rules.oneSpecialCharacterAtLeast(),
  ];
  if (confirm) {
    passwordRules.push(rules.confirmed("password_confirmation"));
  }
  return passwordRules;
}

// no rules for now, we just want passwordConfirmation field
// to be equal to password field, which is validated.
function passwordConfirmationRules() {
  return [];
}

export class CreateUserValidator {
  constructor(protected ctx: HttpContextContract) {}

  public schema = schema.create({
    name: schema.string({ trim: true }, nameRules()),
    email: schema.string({ trim: true }, [
      ...emailRules(),
      rules.unique({ table: "users", column: "email" }),
    ]),
    password: schema.string({ trim: true }, passwordRules()),
    password_confirmation: schema.string(
      { trim: true },
      passwordConfirmationRules()
    ),
    picture: schema.file.optional(pictureRules()),
  });

  public messages = customMessages();
}

合约:

app\contracts\validator.ts

declare module "@ioc:Adonis/Core/Validator" {
  interface Rules {
    oneLowerCaseAtLeast(): Rule;
    oneUpperCaseAtLeast(): Rule;
    oneNumericAtLeast(): Rule;
    oneSpecialCharacterAtLeast(): Rule;
  }
}
回答如下:
发布评论

评论列表(0)

  1. 暂无评论