Laravel аутентификация с именем пользователя не чувствительна к регистру - PullRequest
1 голос
/ 26 апреля 2020

Я использую Laravel ручную аутентификацию, и мне нужна проверка имени пользователя с учетом регистра, но laravel по умолчанию выполняет проверку без учета регистра, я не могу найти в документации, как это изменить. Есть какой-то простой способ или мне нужно написать свою собственную аутентификацию?

Вот мой контроллер

<?php

namespace App\Http\Controllers;

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

class AuthController extends Controller
{
    /**
     * Handle an authentication attempt.
     *
     * @param  \Illuminate\Http\Request $request
     *
     * @return Response
     */
    public function authenticate(Request $request)
    {
        $credentials = $request->only('username', 'password');

        if (Auth::attempt($credentials)) {

            return redirect()->intended('dashboard');
        }
        return redirect()->intended('login');
    }

1 Ответ

1 голос
/ 26 апреля 2020

Соответствие без учета регистра происходит не от самого Laravel, а от вашей базы данных, которая (в большинстве случаев) использует сравнение без учета регистра для хранения имени пользователя. Вы можете изменить свою миграцию на что-то вроде, например:

 public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique()->collation('utf8_bin');
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

Это сопоставит столбец электронной почты с сопоставлением utf8_bin, которое не учитывает регистр. Однако коллекция повлияет на сортировку столбцов, поэтому любые запросы с ORDER BY email могут возвращать другой порядок, если вы используете символы UTF8 неоднозначного порядка. Если это электронное письмо или имя пользователя, которое может использовать только символы ASCII, это не проблема.

...