【问题标题】:Route API, doesn't work on server but local works wellRoute API,在服务器上不起作用,但在本地运行良好
【发布时间】:2018-05-24 07:43:53
【问题描述】:

当我在本地调用此 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');

});

【问题讨论】:

  • 请尝试添加相关代码并改进问题的风格。
  • 尝试在隐身浏览器上再次测试您的本地 api。你在哪里注册的那条路线?在web.phpapi.php
  • 我在 web.php 中注册了我的所有路由。我也在邮递员和浏览器中测试了我所有的 api。它在本地工作
  • @dexterb,不需要令牌的 API 就像登录 API 一样工作。但是其他需要令牌的 API 不工作。
  • @dexterb .. 这是我的路线和生成令牌密钥的函数。

标签: laravel api server


【解决方案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

【讨论】:

    【解决方案2】:

    现在终于可以使用了。其实问题不在于代码错误!这是因为nginx配置。因此,nginx 无法获取 get 请求。 我把nginx配置中的这行代码改成了

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

    这样

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-16
      • 2020-02-25
      • 1970-01-01
      • 2013-06-08
      • 2019-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多