Laravel 方法 Illuminate\Validation\Validator::validateUsername 不存在

0 authentication laravel reactjs

当我尝试提交表单并验证它时,我收到以下错误消息:

方法 Illuminate\Validation\Validator::validateUsername 不存在。

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Http\Requests\LoginRequest;
use App\Http\Requests\RegisterRequest;
use App\Models\User;
use http\Env\Response;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;

class AuthController extends Controller



{
    public function register(RegisterRequest $request)
    {
        $data = $request->validated();
        /** @var \App\Models\User $user */
        $user = User::create([
            'username' => $data['username'],
            'password' => bcrypt($data['password']),
        ]);

        $token = $user->createToken('main')->plainTextToken;
        return response(compact('user', 'token'));
    }

    public function login(LoginRequest $request)
    {
        $credentials = $request->validated();
        if (!Auth::attempt($credentials)) {
            return response([
                'message' => 'Provided username or password is incorrect'
            ], 422);
        }

        /** @var \App\Models\User $user */
        $user = Auth::user();
        $token = $user->createToken('main')->plainTextToken;
        return response(compact('user', 'token'));
    }

    public function logout(Request $request)
    {
        /** @var \App\Models\User $user */
        $user = $request->user();
        $user->currentAccessToken()->delete();
        return response('', 204);
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经使用此命令composer dump-autoload重新加载方法,但它不起作用

这是我的登录请求

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;


class LoginRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array<string, mixed>
     */
    public function rules()
    {
        return [
            'username' => 'required|username|string|exists:users,username',
            'password' => [
                'required',
            ],
            'remember' => 'boolean'
        ];
    }
}
Run Code Online (Sandbox Code Playgroud)

我猜用户名规则有问题谢谢你们的回答:D

Mat*_*ika 5

发布您的内容App\Http\Requests\LoginRequestApp\Http\Requests\RegisterRequestusername该错误表明您使用了名为未定义的自定义规则。

编辑:您使用了可能未定义的自定义“用户名”规则。删除“required”后的规则或定义它。

/**
     * Get the validation rules that apply to the request.
     *
     * @return array<string, mixed>
     */
    public function rules()
    {
        return [
            // Change this
            'username' => 'required|username|string|exists:users,username',
            // To this.
            'username' => 'required|string|exists:users,username',
            'password' => [
                'required',
            ],
            'remember' => 'boolean'
        ];
    }
Run Code Online (Sandbox Code Playgroud)

但是,如果您定义了自定义username规则,请确保您的操作正确。例如,将以下内容放入您的服务提供商中。

use Illuminate\Support\Facades\Validator;

public function boot()
{
    Validator::extend('username', function ($attribute, $value, $parameters, $validator) {
        // Custom validation logic goes here
        // Return true if the validation passes, false otherwise
    });
}
Run Code Online (Sandbox Code Playgroud)