Laravel 用户名认证不区分大小写
Laravel authentication with username is case insensitive
我正在使用 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');
}
不区分大小写的匹配项不是来自 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
排序规则来整理电子邮件列。该集合将影响列的排序,但是如果您使用的是模糊顺序的 UTF8 字符,则任何带有 ORDER BY email
的查询都可能 return 不同的顺序。如果这是只能使用 ASCII 字符的电子邮件或用户名,则这不是问题。
我正在使用 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');
}
不区分大小写的匹配项不是来自 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
排序规则来整理电子邮件列。该集合将影响列的排序,但是如果您使用的是模糊顺序的 UTF8 字符,则任何带有 ORDER BY email
的查询都可能 return 不同的顺序。如果这是只能使用 ASCII 字符的电子邮件或用户名,则这不是问题。