Laravel 5.7: Menambahkan Dukungan untuk Login dengan Username atau Email
Cara menambahan username pada login bawaan laravel 5.7.
Proses di bawah ini membantu Anda memahami hal-hal berikut.
• Menambahkan dukungan untuk verifikasi email yang didukung secara default dalam kerangka sekarang.
• Menambahkan dukungan untuk mendaftar dengan Username, yang tidak tersedia di sistem otentikasi default.
• Menambahkan dukungan untuk login dengan Username atau email.
Alasan di balik menulis artikel ini adalah orang-orang, lebih memilih artikel saya sebelumnya tentang login Laravel dan mendaftar dengan Username atau dukungan email untuk versi Laravel sebelumnya.
Kesesuaian
Jika Anda memulai proyek Laravel 5.7 baru Anda, dan ingin menambahkan dukungan untuk Username atau email untuk masuk dan mendaftar, Anda dapat mengikuti langkah-langkah dari awal.
Untuk setiap proyek yang ada yang baru saja ditingkatkan ke Laravel 5.7, tentu saja berguna untuk mengikuti artikel untuk menyesuaikan sistem otentikasi Anda.
Kustomisasi
Mari kita mulai dengan bagian pendaftaran untuk menambahkan dukungan untuk Username atau login email dengan Laravel 5.7.
Daftar
Untuk penyiapan Laravel 5.7 yang baru, mulailah dengan membuat auth default dengan perintah konsol artisan, yang disertakan bersama kerangka kerja di luar kotak.
Rute
// no email verification
Auth::routes();
// after adding, email verification
Auth::routes(['verify' => true]);
Database
Untuk proyek yang ada, tambahkan file migrasi baru menggunakan perintah artisan untuk menambahkan bidang baru ke tabel user, dan untuk proyek baru yang baru, Anda dapat dengan mudah mengedit file migrasi yang dihasilkan dengan auth dan menambahkan satu baris di bawah ini.
$table->string('username')->unique();
Untuk mengisi nilai di database for username, kita harus menambahkan Username kunci ke $fillableproperti di bawah app/User.phpmodel database.
protected $fillable = ['name', 'email', 'password', 'username'];
Melihat
Form pendaftaran user juga membutuhkan sedikit penyesuaian untuk menambahkan bidang Username.
<div class="form-group row">
<label for="username" class="col-md-4 col-form-label text-md-right">{{ __('Username') }}</label>
<div class="col-md-6">
<input id="username" type="text" class="form-control{{ $errors->has('username') ? ' is-invalid' : '' }}" name="username" value="{{ old('username') }}" required>
@if ($errors->has('username'))
<span class="invalid-feedback" role="alert">
<strong>{{ $errors->first('username') }}</strong>
</span>
@endif
</div>
</div>
Kontroler
Sistem autentikasi default dikirimkan dengan kelas pengontrol, yang menangani metode yang diperlukan untuk sistem pendaftaran. Kami telah mengedit beberapa metode di bawah kelas itu untuk menambahkan Username ke database.
Gabung
Kami telah menambahkan rute yang diperlukan, langkah verifikasi email ditautkan dengan artikel lain. Agar sistem login mendukung Username atau email, kami perlu mengganti beberapa metode pada pengontrol login.
Form login membutuhkan sedikit perubahan pada bidang jenis masukan dari email ke teks.
<input id="email" type="text" class="form-control{{ $errors->has('email') ? ' is-invalid' : '' }}" name="email" value="{{ old('email') }}" required autofocus>
Kelas pengontrol untuk login juga disertakan dengan kerangka kerja dan menggunakan suatu AuthenticatesUserssifat, yang menangani metode khusus yang diperlukan untuk sistem autentikasi default.
Untuk menerapkan perubahan baru yang kita butuhkan, kita harus mengganti metode di bawah kelas controller untuk sistem login.
// LoginController.php
/**
* Get the needed authorization credentials from the request.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
protected function credentials(Request $request)
{
$field = $this->field($request);
return [
$field => $request->get($this->username()),
'password' => $request->get('password'),
];
}
/**
* Determine if the request field is email or username.
*
* @param \Illuminate\Http\Request $request
* @return string
*/
public function field(Request $request)
{
$email = $this->username();
return filter_var($request->get($email), FILTER_VALIDATE_EMAIL) ? $email : 'username';
}
/**
* Validate the user login request.
*
* @param \Illuminate\Http\Request $request
* @return void
*/
protected function validateLogin(Request $request)
{
$field = $this->field($request);
$messages = ["{$this->username()}.exists" => 'The account you are trying to login is not registered or it has been disabled.'];
$this->validate($request, [
$this->username() => "required|exists:users,{$field}",
'password' => 'required',
], $messages);
}
Kesimpulan
Terima kasih telah menindaklanjuti artikel reguler saya, dan membaca hingga akhir. Jika Anda memiliki umpan balik untuk saya, silakan tinggalkan komentar Anda. Jangan lupa share jika menurut Anda layak untuk dibagikan, dan baca artikel saya.
Selamat Mencoba!
Komentar
Posting Komentar