Laravel 5.3中间件:创建用于身份验证的中间件

时间:2016-10-08 16:57:38

标签: php json laravel authentication jwt

所以,我有一个提供用户登录的API,如果用户成功登录,登录API将返回一个Json Web Token。

我将在前端使用登录API,一切顺利,我得到了Json Web Token。 但是,我也想使用laravel auth中间件,因为只有真实用户(带令牌的用户)才能移动到另一个页面。 (是的,我使用路线组)。

这是我的路线:

// Login
Route::get('/tera/admin/login', 'Backend\Login\LoginController@index');

Route::group(['middleware' => 'auth'], function () {
    // Logout
    Route::get('/tera/admin/dologout', 'Backend\Logout\LogoutController@index');

    // Dashboard
    Route::get('/tera/dashboard', 'Backend\Dashboard\DashboardController@index');

    // Inventory
    Route::get('/inventory', 'Backend\Inventory\InventoryController@index');
});

通过这种方法,中间件总是将我重定向到内置登录页面的laravel。

解决此案的最佳做法是什么?

谢谢。

1 个答案:

答案 0 :(得分:0)

您需要更改Authentication Routes文件中auth()方法中的Illuminate\Routing\Router.php。在Laravel 5.3中,auth()方法定义了以下路由:

public function auth()
{
    // Authentication Routes...
    $this->get('login', 'Auth\LoginController@showLoginForm')->name('login');
    $this->post('login', 'Auth\LoginController@login');
    $this->post('logout', 'Auth\LoginController@logout');

    // Registration Routes...
    $this->get('register', 'Auth\RegisterController@showRegistrationForm');
    $this->post('register', 'Auth\RegisterController@register');

    // Password Reset Routes...
    $this->get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm');
    $this->post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail');
    $this->get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm');
    $this->post('password/reset', 'Auth\ResetPasswordController@reset');
}

因此,您可以在此功能或routes文件中更改它们,您可以使用auth前缀覆盖它们:

Route::group(['prefix' => 'auth', 'middleware' => 'auth'], function() {
    Route::get('login', 'Backend\Login\LoginController@index');
    //Define rest of your routes here...
});

或者,您可以导航到app\Http\Controllers\Auth目录,在该目录中您将看到处理身份验证的不同控制器。您将在此目录中看到LoginController.phpRegisterController.php。这两个控制器都包含属性$redirectTo,用于定义用户登录后重定向的位置。将此属性更改为所需的路由,您应该重定向到新路由。