2015-03-27 20 views
16

Cố gắng chơi với Laravel ngay hôm nay. Tôi nhận được lỗi sau khi tôi cố gắng đến thăm localhost/dự án/công cộng:Tuyến đường [đăng nhập] không được xác định

InvalidArgumentException
Route [đăng nhập] không được định nghĩa.

app/routes.php:

<?php 

Route::get('/', '[email protected]'); 
Route::get('login', '[email protected]'); 
Route::post('login', '[email protected]'); 
Route::get('dashboard', '[email protected]'); 

app/controllers/HomeController.php:

<?php 

class HomeController extends Controller { 

    public function redirect() 
    { 
     if (Auth::check()) 
      return Redirect::route('dashboard'); 

     return Redirect::route('login'); 
    } 

} 

app/controllers/LoginContoller.php:

<?php 

class LoginController extends Controller { 

    public function show() 
    { 
     if (Auth::check()) 
      return Redirect::route('dashboard'); 

     return View::make('login'); 
    } 

    public function do() 
    { 
     // do login 
    } 

} 

ứng dụng /controllers/DashboardController.php:

<?php 

class DashboardController extends Controller { 

    public function show() 
    { 
     if (Auth::guest()) 
      return Redirect::route('login'); 

     return View::make('dashboard'); 
    } 

} 

Tại sao tôi gặp phải lỗi này?

Trả lời

38

Bạn đang cố gắng chuyển hướng đến một named route có tên là login, nhưng bạn không có tuyến đường với tên đó:

Route::post('login', [ 'as' => 'login', 'uses' => '[email protected]']); 

Phần 'as' của tham số thứ hai định nghĩa tên của tuyến đường. Thông số chuỗi đầu tiên xác định nó là tuyến đường.

7

Laravel đã giới thiệu Named Routes trong Laravel 4.2.

NHỮNG LỆNH ĐƯỢC MANG ĐƯỢC GÌ?

Các tuyến được đặt tên cho phép bạn đặt tên cho đường dẫn bộ định tuyến của mình. Do đó sử dụng tên chúng ta có thể gọi các tuyến đường trong tập tin yêu cầu.


LÀM THẾ NÀO ĐỂ TẠO ĐƯỜNG đặt tên?

Tuyến đường được đặt tên được tạo ra trong hai cách khác nhau: nhưTên()

PHƯƠNG PHÁP 1:

Route::get('about',array('as'=>'about-as',function() 
    { 
      return view('about'); 
    } 
)); 

PHƯƠNG PHÁP 2:

Route::get('about',function() 
{ 
return view('about'); 
})->name('about-as'); 

Cách chúng tôi sử dụng trong chế độ xem?

<a href="{{ URL::route("about-as") }}">about-as</a> 

Do đó laravel 'middleware' => 'auth' đã được xác định trước cho chuyển hướng như trang đăng nhập nếu người dùng chưa đăng nhập in.Hence chúng ta nên sử dụng như từ khóa

Route::get('login',array('as'=>'login',function(){ 
    return view('login'); 
})); 
15

Trong ứng dụng \ Exceptions \ Handler.php

protected function unauthenticated($request, AuthenticationException $exception) 
{ 
    if ($request->expectsJson()) { 
     return response()->json(['error' => 'Unauthenticated.'], 401); 
    } 

    return redirect()->guest(route('auth.login')); 
} 
+3

yeah, nhưng nó là một điều đáng tiếc rằng Laravel hadcoded tuyến đường này ((nó không rõ ràng cho người mới – yuklia

+1

Cảm ơn bạn rất nhiều cho việc này. – Galironfydar

+0

Đây là câu trả lời mà đang tìm kiếm rất nhiều ngày –

1

Hãy thử phương pháp này:

nhìn cho tập tin này

"RedirectifAuthenticated.php"

cập nhật sau khi bạn muốn

if (Auth::guard($guard)->check()) { 
    return redirect('/'); 
} 

$ bảo vệ như một arg sẽ nhân danh bảo vệ tùy chỉnh bạn đã đặt ví dụ. "admin" sau đó nó sẽ được như thế này.

if (Auth::guard('admin')->check()) { 
    return redirect('/admin/dashboard'); 
}else{ 
    return redirect('/admin/login'); 
} 
1

Gần đây, tôi gặp phải lỗi này sau khi sử dụng định tuyến xác thực tích hợp của Laravel bằng cách sử dụng php artisan make:auth. Khi bạn chạy lệnh đó, các tuyến đường mới này sẽ được thêm vào tệp web.php của bạn:

Auth::routes(); 

Route::get('/home', '[email protected]')->name('home'); 

Tôi phải vô tình xóa các tuyến đường này. Chạy php artisan make:auth một lần nữa phục hồi các tuyến đường và giải quyết vấn đề. Tôi đang chạy Laravel 5.5.28.

0

Thay thế trong quan điểm của bạn (file lưỡi) tất cả

{{đường ('/')}} ----- bởi ----> {{url ('/') }}

0

Trong trường hợp API hoặc giả sử trong khi triển khai JWT. Phần mềm trung gian JWT ném ngoại lệ này khi nó không thể tìm thấy mã thông báo và sẽ cố gắng chuyển hướng đến nhật ký trong tuyến đường. Vì nó không thể tìm thấy bất kỳ tuyến đường đăng nhập nào được chỉ định, nó sẽ ném ngoại lệ này. Bạn có thể thay đổi tuyến đường trong "app \ Exceptions \ Handler.php"

sử dụng Illuminate \ Auth \ AuthenticationException;

protected function unauthenticated($request, AuthenticationException $exception){ 
     return $request->expectsJson() 
      ? response()->json(['message' => $exception->getMessage()], 401) 
      : redirect()->guest(route('ROUTENAME')); 
} 
Các vấn đề liên quan