Route API,不在服务器上运行,但本地运行良好

时间:2017-12-10 18:06:25

标签: laravel api server

当我在本地调用此API时,它工作正常并返回值。但是当我在服务器上部署之后调用这些API时,总是需要返回令牌密钥。我也从数据库中输入准确的令牌密钥。

这是我为每个用户设置的令牌功能。

private function randomDigit($length, $count)
    {
        $codes = [];
        $stringDigits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

        while (count($codes) < $count) {
            $randomString = '';
            for ($i = 0; $i < $length; $i++) {
                $randomString = (string)$randomString . substr($stringDigits, rand(0, strlen($stringDigits) - 1), 1);
            }
            if (!in_array($randomString, $codes)) {
                $codes[] = (string)$randomString;
            }
        }

        return $codes;
    }

这就是我的路线。

Route::group(['middleware' => 'token'], function (){

    Route::get('/api/users', 'UserController@apiUsers')->name('api.users');

    Route::get('/api/user/{id}/show', 'UserController@apiUserShow')->name('api.user.show');

    Route::delete('/api/logout', 'UserController@apiLogout')->name('api.logout');

    Route::post('/api/user/{id}/state', 'UserController@apiState')->name('api.state');

    Route::get('/api/user/{id}/getstate', 'UserController@apiGetState')->name('api.getState');

    Route::get('/api/fetch', 'UserController@apiFetch')->name('api.fetch');

    Route::get('/api/init', 'UserController@apiInit')->name('api.init');

    Route::post('/api/user/{id}/present', 'UserController@apiPresent')->name('api.present');

    Route::get('/api/user/{id}/retrieve', 'UserController@apiRetrieve');

    Route::get('/api/user/{id}/getattand', 'UserController@apiGetAttend')->name('api.getAttand');

});

2 个答案:

答案 0 :(得分:1)

您实际上只是在重新创建Laravel已经开箱即用的功能。

您应该在api.php上注册您的API路线。在您的users表格中,确保您有api_token列。此列是一个60个字符的长随机字符串。当您的用户注册时,您可以使用str_random(60)填写api_token。 在api.php中,这就是它的样子:

Route::group(['middleware' => 'auth:api'], function () {
    Route::get('/fetch', 'MyAwesomeController@someFunction');
    Route::get('/user', function (Request $request) {
       return $request->user();
    });
});

// the above will then create http://example.com/api/fetch route
//  and http://example.com/api/user

然后,在你做出这些改变之后,就是这样。

// below will return the authenticated user using the api_token`
GET - http://example.com/api/user?api_token=XXXXXXX

GET - http://example.com/api/fetch?api_token=XXXXXXXXX

答案 1 :(得分:0)

最后它现在有效。实际上问题不在于代码错误!这是因为nginx配置。由于这个原因,nginx无法获取get请求。 我将nginx配置中的这行代码更改为

location / {
    try_files       $uri $uri/ /index.php$query_string;
}

喜欢这个

location / {
    try_files $uri $uri/ /index.php$is_args$args;
}