以下是实现 Laravel 默认邮箱登录改成用户名登录的详细攻略。
1. 概述
Laravel框架默认使用邮箱作为用户登录的标识,但我们可能需要使用用户名作为用户登录的标识。本文将介绍如何实现Laravel默认邮箱登录改成用户名登录的实现方法。
2. 实现步骤
2.1 修改迁移文件
Laravel框架默认生成的迁移文件中,用户表的迁移文件中有以下代码:
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
我们需要将email字段改为username字段,在用户表的迁移文件中增加以下代码:
$table->string('username')->unique();
$table->dropUnique('users_email_unique');
$table->dropColumn('email');
$table->string('email')->unique()->nullable();
2.2 修改User模型
Laravel框架默认的User模型对应用户表,我们需要修改User模型以适应改动后的用户表。
class User extends Authenticatable
{
use Notifiable;
protected $fillable = [
'username', 'email', 'password',
];
protected $hidden = [
'password', 'remember_token',
];
protected $casts = [
'email_verified_at' => 'datetime',
];
public function findForPassport($username) {
return $this->where('username', $username)->first();
}
public function getUsername() {
return $this->username;
}
public function getEmail() {
return $this->email;
}
}
2.3 修改登录逻辑
在App\Http\Controllers\Auth\LoginController控制器中,我们需要修改登录逻辑,将原有的email字段改为username字段。
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Laravel\Passport\HasApiTokens;
class LoginController extends Controller
{
use HasApiTokens;
public function login(Request $request)
{
$request->validate([
'username' => 'required|string',
'password' => 'required|string',
]);
$credentials = request(['username', 'password']);
if (!Auth::attempt($credentials)) {
return response()->json([
'message' => 'Unauthorized'
], 401);
}
$user = $request->user();
$success['token'] = $user->createToken('appName')->accessToken;
$success['username'] = $user->getUsername();
return response()->json([
'success' => $success
]);
}
}
3. 示例说明
3.1 示例一
举个栗子,假设现在有一个名为“login”的api,使用post方式请求:
POST http://example.com/api/login
请求体(Content-Type为application/json):
{
"username": "user1",
"password": "password1"
}
返回结果:
{
"success": {
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9...",
"username": "user1"
}
}
3.2 示例二
我们还可以使用Laravel Sanctum验证库实现用户名登录。在修改完相应的代码后,我们只需要在验证前调用Sanctum的auth方法即可。
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Laravel\Sanctum\HasApiTokens;
class LoginController extends Controller
{
use HasApiTokens;
public function login(Request $request)
{
$request->validate([
'username' => 'required|string',
'password' => 'required|string',
]);
$user = User::where('username', $request->username)->first();
if (!$user || !Hash::check($request->password, $user->password)) {
return response()->json([
'message' => 'Unauthorized'
], 401);
}
$user->tokens()->delete();
$token = $user->createToken('API Token')->plainTextToken;
return response()->json([
'access_token' => $token,
'token_type' => 'Bearer',
'user' => $user,
], 200);
}
}
通过此示例可以看出,我们同样可以使用Laravel Sanctum实现用户名登录,并且不需要做出太多的修改。
4. 总结
通过以上步骤,我们就可以实现Laravel默认邮箱登录改成用户名登录了。我们需要改动的主要部分是用户表的迁移文件,User模型,以及登录逻辑。在实际使用中,我们需要注意保证代码的稳定性和安全性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Laravel 默认邮箱登录改成用户名登录的实现方法 - Python技术站