我在Laravel中有一个简单的API。路径文件是这样的:
<?php
Route::resource('airports', 'AirportController');
Route::resource('flights', 'FlightController');
Route::resource('reservations', 'ReservationController');
Route::get('auth', 'AuthController@index');
Route::post('auth', 'AuthController@store');
Route::delete('auth', 'AuthController@destroy');
过滤器的文件添加了自定义过滤器,如下所示:
Route::filter('auth_token', function()
{
$auth_token = Request::header('Authorization');
if(!AuthToken::where('auth_token', '=', $auth_token)->first()){
return Response::json([], 401);
}
});
所有资源都需要在auth_token
过滤器之前传递。现在这在我的本地机器上工作得很好但是一旦我在我的服务器上尝试它,即使我传递了有效的令牌,一切都是未经授权的。我在自定义过滤器中由dd($auth_token)
计算的问题是它返回null,这意味着我的服务器由于某种原因不接受标头。
我的.htaccess文件如下所示:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Headers "*"
</IfModule>
我正在使用Postman REST客户端来测试我的应用程序。系统中只有一个用户使用电子邮件&#39; admin@admin.com'和密码&#39; admin12345&#39;。您可以POST
将这些详细信息/auth
发送到{{1}}路由,并获取授权访问令牌,然后可以使用该令牌获取系统中的其他资源。
该应用程序已托管here。我做错了什么?
答案 0 :(得分:1)
路线的顺序可能是个问题。尝试颠倒这样,看看它是否有效......
Route::get('auth', 'AuthController@index');
Route::post('auth', 'AuthController@store');
Route::delete('auth', 'AuthController@destroy');
Route::resource('airports', 'AirportController');
Route::resource('flights', 'FlightController');
Route::resource('reservations', 'ReservationController');