Nếu bạn đang làm việc trên Laravel 5. 1 và sử dụng lớp Auth cho mục đích xác thực, rất có thể bạn sẽ gặp phải vấn đề chuyển hướng về nhà sau khi đăng nhập
Mặc dù các tài liệu nói rằng bạn có thể ghi đè hành vi bằng cách đặt giá trị $redirectedPath. Thing là nó vẫn sẽ không làm việc. Sau khi lãng phí một thời gian hợp lý, tôi đã tìm ra vấn đề
Theo mặc định, hàm tạo Auth được định nghĩa là
public function __construct[] { $this->middleware['guest', ['except' => 'getLogout']]; }
Phần mềm trung gian này thực sự gọi đặc điểm RedirectIfAuthenticated. Nếu bạn đi đến định nghĩa, bạn sẽ tìm thấy
Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách tùy chỉnh hệ thống xác thực trong ứng dụng Laravel 8 của mình để chuyển hướng người dùng sau khi họ đăng ký hoặc đăng nhập vào một tuyến khác tùy thuộc vào vai trò của họ
Hầu hết thời gian, hệ thống xác thực do Laravel 8 cung cấp là đủ để thêm thông tin đăng nhập và đăng ký vào ứng dụng web của bạn
Giàn giáo xác thực hiện được chuyển sang gói
user[]->role == 'admin'] {
return '/admin';
}
return '/home';
}
public function __construct[]
{
$this->middleware['guest']->except['logout'];
}
}
5 riêng biệt cung cấp các tuyến đường và chế độ xem vượt trội cho user[]->role == 'admin'] {
return '/admin';
}
return '/home';
}
public function __construct[]
{
$this->middleware['guest']->except['logout'];
}
}
6, user[]->role == 'admin'] {
return '/admin';
}
return '/home';
}
public function __construct[]
{
$this->middleware['guest']->except['logout'];
}
}
7 và user[]->role == 'admin'] {
return '/admin';
}
return '/home';
}
public function __construct[]
{
$this->middleware['guest']->except['logout'];
}
}
8 được bao gồm trong dự án của bạn và chịu trách nhiệm cung cấp chức năng của hệ thống xác thựcXin lưu ý rằng nhóm Laravel khuyến nghị các nhà phát triển sử dụng Jetstream cho các dự án Laravel 8 mới nhưng họ cũng đã cập nhật gói
5 lên phiên bản 3 để sử dụng với Laravel 8, đặc biệt nếu bạn đang cập nhật ứng dụng Laravel 7 trước đây của mình lên phiên bản mới nhấtuser[]->role == 'admin'] { return '/admin'; } return '/home'; } public function __construct[] { $this->middleware['guest']->except['logout']; } }
Chuyển hướng xác thực của Laravel 8 bằng cách sử dụng user[]->role == 'admin'] {
return '/admin';
}
return '/home';
}
public function __construct[]
{
$this->middleware['guest']->except['logout'];
}
}
0
user[]->role == 'admin'] {
return '/admin';
}
return '/home';
}
public function __construct[]
{
$this->middleware['guest']->except['logout'];
}
}
Ví dụ: nếu bạn xem tệp
user[]->role == 'admin'] {
return '/admin';
}
return '/home';
}
public function __construct[]
{
$this->middleware['guest']->except['logout'];
}
}
1, bạn sẽ tìm thấy đoạn mã saumiddleware['guest']->except['logout'];
}
}
Bạn có thể thấy rằng một biến
user[]->role == 'admin'] {
return '/admin';
}
return '/home';
}
public function __construct[]
{
$this->middleware['guest']->except['logout'];
}
}
0 tồn tại và có giá trị là user[]->role == 'admin'] {
return '/admin';
}
return '/home';
}
public function __construct[]
{
$this->middleware['guest']->except['logout'];
}
}
3 nơi người dùng được chuyển hướng sau khi họ đăng nhậpTrong hệ thống xác thực tích hợp sẵn của Laravel, bạn có thể tùy chỉnh nhiều mặt, chẳng hạn như lộ trình chuyển hướng bằng cách sử dụng biến
user[]->role == 'admin'] {
return '/admin';
}
return '/home';
}
public function __construct[]
{
$this->middleware['guest']->except['logout'];
}
}
0 tồn tại trong cả bộ điều khiển đăng nhập và đăng kýNếu bạn muốn chuyển hướng người dùng của mình đến các tuyến khác với tuyến mặc định sau khi họ đăng ký hoặc đăng nhập, bạn chỉ cần thay đổi giá trị của
user[]->role == 'admin'] {
return '/admin';
}
return '/home';
}
public function __construct[]
{
$this->middleware['guest']->except['logout'];
}
}
0Chuyển hướng xác thực của Laravel 8 bằng phương thức user[]->role == 'admin'] {
return '/admin';
}
return '/home';
}
public function __construct[]
{
$this->middleware['guest']->except['logout'];
}
}
6
user[]->role == 'admin'] {
return '/admin';
}
return '/home';
}
public function __construct[]
{
$this->middleware['guest']->except['logout'];
}
}
Bây giờ, nếu bạn muốn chuyển hướng người dùng đến một tuyến tùy thuộc vào một số tiêu chí của người dùng, chẳng hạn như vai trò của họ thì sao?
Hệ thống xác thực của Laravel cũng giải quyết vấn đề đó bằng cách cung cấp phương thức
user[]->role == 'admin'] {
return '/admin';
}
return '/home';
}
public function __construct[]
{
$this->middleware['guest']->except['logout'];
}
}
6 mà bạn có thể sử dụng thay vì biến user[]->role == 'admin'] {
return '/admin';
}
return '/home';
}
public function __construct[]
{
$this->middleware['guest']->except['logout'];
}
}
0Hãy lấy ví dụ về
user[]->role == 'admin'] {
return '/admin';
}
return '/home';
}
public function __construct[]
{
$this->middleware['guest']->except['logout'];
}
}
6 của ứng dụng CRM của chúng ta bằng cách thêm phương thức user[]->role == 'admin'] {
return '/admin';
}
return '/home';
}
public function __construct[]
{
$this->middleware['guest']->except['logout'];
}
}
6 để chuyển hướng người dùng quản trị đến một tuyến khác ngoài tuyến user[]->role == 'admin'] {
return '/admin';
}
return '/home';
}
public function __construct[]
{
$this->middleware['guest']->except['logout'];
}
}
3user[]->role == 'admin'] {
return '/admin';
}
return '/home';
}
public function __construct[]
{
$this->middleware['guest']->except['logout'];
}
}
Chúng ta cũng cần làm điều đó trong bộ điều khiển đăng ký. Mở tệp
user[]->role == 'admin'] {
return '/admin';
}
return '/home';
}
public function __construct[]
{
$this->middleware['guest']->except['logout'];
}
}
42 và cập nhật nó như sauuser[]->role == 'admin'] {
return '/admin';
}
return '/home';
}
public function __construct[]
{
$this->middleware['guest']->except['logout'];
}
}
4Bạn có thể loại bỏ biến
user[]->role == 'admin'] {
return '/admin';
}
return '/home';
}
public function __construct[]
{
$this->middleware['guest']->except['logout'];
}
}
0 hoặc để nguyên vì nó sẽ bị ghi đè đơn giản bởi phương thức user[]->role == 'admin'] {
return '/admin';
}
return '/home';
}
public function __construct[]
{
$this->middleware['guest']->except['logout'];
}
}
6Tạo Trình điều khiển Laravel 8 cho Quản trị viên
Bây giờ, tất cả những gì bạn cần là tạo một tuyến đường ________ 145 cùng với một tuyến đường ________ 146. Quay trở lại thiết bị đầu cuối của bạn và chạy lệnh thủ công sau
user[]->role == 'admin'] {
return '/admin';
}
return '/home';
}
public function __construct[]
{
$this->middleware['guest']->except['logout'];
}
}
0Tiếp theo mở file
user[]->role == 'admin'] {
return '/admin';
}
return '/home';
}
public function __construct[]
{
$this->middleware['guest']->except['logout'];
}
}
47 và cập nhật như sauuser[]->role == 'admin'] {
return '/admin';
}
return '/home';
}
public function __construct[]
{
$this->middleware['guest']->except['logout'];
}
}
2Tiếp theo mở file
user[]->role == 'admin'] {
return '/admin';
}
return '/home';
}
public function __construct[]
{
$this->middleware['guest']->except['logout'];
}
}
48 và thêm route vào admin controller như sauSự kết luận
Trong hướng dẫn này, chúng tôi đã triển khai chuyển hướng trong ứng dụng Laravel 8 CRM của mình để người dùng quản trị được chuyển hướng đến một tuyến đường khác trong khi người dùng bình thường được chuyển hướng đến tuyến đường chính. Chuyển hướng không thực thi bất kỳ quy tắc bảo mật nào vì người dùng bình thường vẫn có thể truy cập tuyến đường
user[]->role == 'admin'] {
return '/admin';
}
return '/home';
}
public function __construct[]
{
$this->middleware['guest']->except['logout'];
}
}
45. Chúng ta cần ngăn chặn điều đó bằng cách sử dụng phần mềm trung gian, chủ đề của hướng dẫn tiếp theo