Laravel có một hệ thống Auth tuyệt vời, chỉ với một vài lệnh bạn có thể có sẵn các chức năng Đăng nhập / Đăng ký. Nhưng hãy để Lặn lặn sâu hơn một chút và xem những gì chúng ta có thể dễ dàng tùy chỉnh.

1. Vô hiệu hóa đăng ký

Điều gì sẽ xảy ra nếu ứng dụng của bạn có người dùng đã đăng ký trước hoặc do quản trị viên tạo ra và không có đăng ký công khai?

Kể từ Laravel 5.7, tất cả những gì bạn cần làm là thêm một tham số trong routes/web.php:

Auth::routes(['register' => false]);

Sau đó, bạn đã thành công, xem liên kết Register ở góc trên bên phải và tuyến routes /register sẽ hiển thị trang 404.

2. Enable Email Verification

Một tính năng mới khác của Laravel 5.7 là xác minh email, với trường người dùng users.email_verified_at. Theo mặc định, nó bị vô hiệu hóa, nhưng tất cả các trường và tuyến cần thiết được tạo, chỉ bị ẩn.

Để kích hoạt chức năng này, chỉ cần truyền tham số trong routes/web.php:

Auth::routes(['verify' => true]);

Ngoài ra, hãy đảm bảo chạy php artisan make:auth để nó tạo ra các lượt xem cần thiết cho người dùng để xem sau khi họ nhấp vào liên kết xác minh.

Cuối cùng, nếu bạn cần một số tuyến chỉ dành cho người dùng đã được xác minh, hãy sử dụng verified Middleware:

Route::get('profile', function () {
    // Only verified users may enter...
})->middleware('verified');

3. Disable Reset Password

Theo mặc định, php artisan make:auth lệnh tạo các trang login/register  Bootstrap, cùng với một trang để đặt lại mật khẩu đã quên.

Nhưng nếu bạn muốn vô hiệu hóa tính năng đó và có một số cơ chế khác để khôi phục mật khẩu, thì có một tham số khác trong các routes/web.php:

Auth::routes(['reset' => false]);

Lưu ý: bạn có thể kết hợp điều này với các mẹo trước đây về đăng ký và xác minh và có điều này trong các routes/web.php:

Auth::routes([   
'register' => false,
'verify' => true,
'reset' => false
]);

Các tuyến bên dưới được liệt kê trong một phương thức trong vendor/laravel/framework/src/Illuminate/Routing/Router.php:

4. Redirect After Registration

Theo mặc định, người dùng đã đăng ký mới được chuyển hướng đến URL /home. Có lẽ, bạn muốn thay đổi nó, nó được thực hiện trong một tập tin app/Http/Controllers/Auth/RegisterController.php:

class RegisterController extends Controller {     
/**
* Where to redirect users after registration.
*
* @var string
*/
protected $redirectTo = '/home';

Chỉ cần thay đổi một tham số này, và đó là nó.

Nhưng nếu bạn có logic phức tạp hơn chỉ một URL tĩnh thì sao? Ví dụ: bạn muốn đăng ký các URL khác nhau dựa trên vai trò của người dùng mới. Sau đó, bạn có thể tạo riêng một method trong class RegisterController, với tên redirectTo():

protected function redirectTo() {     
if (auth()->user()->role_id == 1) {
return '/admin';
}
return '/home';
}

Hành vi phương thức sẽ ghi đè giá trị thuộc tính $redirectTo, ngay cả khi giá trị hiện diện.

5. Change Field Validation Rules

Auth mặc định có bốn trường:

  • name
  • email
  • password
  • confirm password

Tất cả chúng đều được yêu cầu và các quy tắc xác thực này được chỉ định giống nhau app/Http/Controllers/Auth/RegisterController.php:

protected function validator(array $data) 
{
return Validator::make($data, [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:6', 'confirmed'],
]);
}

Vì vậy, nếu bạn muốn thay đổi bất kỳ trong số này, như thêm các yêu cầu mật khẩu phức tạp hơn chỉ tối thiểu 6 ký hiệu, chỉ cần chỉnh sửa phương thức validator() này.

6. Disable Auto-Login after Registration

Một hành vi mặc định khác mà bạn có thể muốn thay đổi là tự động đăng nhập ngay sau khi đăng ký. Bạn có thể muốn chuyển hướng người dùng của mình đến một trang “success” và mong họ đăng nhập thủ công sau này.

Để làm điều đó, bạn cần ghi đè phương thức register () của một đặc điểm RegistersUsers.

Bộ điều khiển chúng ta đã thảo luận ở trên, RegisterController, sử dụng đặc điểm quan trọng này:

class RegisterController extends Controller {     
use RegistersUsers;
// ... all other code of controller

Đặc điểm này thực hiện tất cả các công việc “dirty work” của Đăng ký. Nó là một phần của khung cốt lõi, nằm ở vendor/laravel/framework/src/Illuminate/Foundation/Auth/RegistersUsers.php:

Để tắt đăng nhập tự động, bạn cần xóa dòng cụ thể này:

$this->guard()->login($user);

Nhưng chúng ta không nên can thiệp vào trong  /vendor để thay đổi. Thay vào đó chúng ta sẽ ghi đè phương thức tương tự vào trong RegisterController:

namespace App\Http\Controllers\Auth; 
// DON'T FORGET TO ADD THESE TWO!
use Illuminate\Http\Request;
use Illuminate\Auth\Events\Registered;
use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;

class RegisterController extends Controller {
// ... Other methods
/**
* Handle a registration request for the application.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function register(Request $request)
{
$this->validator($request->all())->validate();
event(new Registered($user = $this->create($request->all())));
return $this->registered($request, $user)
?: redirect($this->redirectPath());
}
}

Cuối cùng, hãy quan tâm đến tham số hoặc phương thức redirectTo, như được hiển thị trong mẹo trước, để người dùng đã đăng ký của bạn sẽ vào đúng trang.

7. Adding More Fields to Registration Form

Ví dụ điển hình nhất về điều này sẽ là thêm một trường họ, ngoài tên mặc định. Có một vài bước bạn cần làm ở đây:

Bước 1. Thêm trường vào cơ sở dữ liệu.

Chỉ cần thêm dòng này vào một số tệp di chuyển:  $table->string(‘surname’);
Chọn chỉnh sửa tệp di chuyển mặc định hiện có hoặc tạo tệp mới với php artisan make:migration add_surname_to_users_table.

Bước 2. Thêm trường dưới dạng điền vào mô hình Người dùng.

Theo mặc định, app/User.php có cái này:

protected $fillable = [     
'name', 'email', 'password',
];

Vì vậy, bạn cần thêm  ‘surname’ của mình vào mảng đó.

Bước 3. Thêm trường vào views.

Bạn cần chỉnh sửa tệp resources/views/auth/register.blade.php và thêm một trường khác, có thể sao chép-dán tất cả mã cho trường name và thay đổi một số phần của nó.

Bước 4. Sửa đổi phương thức create().

Ở đây, cách thức phương thức mặc định trong RegisterController:
Đoán xem, bạn chỉ cần thêm một dòng khác liên quan đến họ, vì vậy kết quả cuối cùng là đây:

protected function create(array $data) 
{ return User::create([
'name' => $data['name'],
'surname' => $data['surname'],
'email' => $data['email'],
password' => Hash::make($data['password']),
]);
}

8. Login with Username instead of Email

Theo mặc định, email là trường quan trọng nhất đối với người dùng, nó được sử dụng như một định danh duy nhất và là một phần của thông tin đăng nhập. Nhưng nếu trong trường hợp của bạn, email chỉ là một trường thông tin và thông tin đăng nhập thực tế là một tên khác, như username thì sao?

Trước tiên, hãy chú ý thêm trường đó vào database/model/views, như được thảo luận trong mẹo trước.

Tiếp theo, bạn cần xem qua app/Http/Controllers/Auth/LoginController, cụ thể một đặc điểm:

use AuthenticatesUsers;

Nếu bạn hiểu sâu hơn về điều đó /vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php trait, bạn sẽ thấy một phương pháp:

/**  
* Get the login username to be used by the controller.
*
* @return string
*/
public function username()
{
return 'email';
}

Hãy xem, nó chỉ là một trường không đổi được trả về bởi một hàm. Và sau đó nó được sử dụng trong xác thực và xác thực, trong cùng một đặc điểm:

protected function validateLogin(Request $request) 
{
$request->validate([
$this->username() => 'required|string',
'password' => 'required|string',
]);
}

Vì vậy, tất cả những gì bạn cần làm là ghi đè phương thức này vào LoginController, tương tự như những gì chúng ta đã làm với tham số redirectTo trước đây trong bài viết này.

class LoginController extends Controller {     
use AuthenticatesUsers;
// ... All other code
public function username()
{
return 'username';
}
}

Vì vậy, đây là những lời khuyên tôi muốn chia sẻ trong bài viết này. Bất cứ điều gì bạn sẽ thêm?

Nguồn: https://laraveldaily.com/9-things-you-can-customize-in-laravel-registration/

LEAVE A REPLY

Please enter your comment!
Please enter your name here