file_get_contents(https://..@me): 无法打开流: HTTP 请求失败!HTTP/1.1


file_get_contents(https://...@me): failed to open stream: HTTP request failed! HTTP/1.1 401 Unauthorized

我正在开发一个网页,我必须从API(使用PHP)获取数据。身份验证工作正常,用户可以登录。为了保存访问令牌,我在 php 中使用了函数 setcookie()。但是一段时间后,数据消失了,我收到以下警告:

Warning: file_get_contents(https://...@me): failed to open stream: HTTP request failed! HTTP/1.1 401 Unauthorized in C:'wamp'www'main.php on line 40

这些是行:

function getUser($access_token){
$url = "https://jawbone.com/nudge/api/v.1.0/users/@me";
$opts = (array(
    'http'=>array(
        'method'=>"GET",
        'header'=>"Authorization: Bearer {$access_token}'r'n"
    )
));
$context = stream_context_create($opts);
$response = file_get_contents($url, false, $context); //
$user = json_decode($response, true);
return $user['data'];
}

这实际上很奇怪,因为当我删除访问令牌cookie然后再次登录(并进行身份验证)时,它可以工作......我根本不明白为什么会发生这种情况。

设置 cookie(过期时间为 31536000):

 if (!isset($_COOKIE['access_token'])) {
        setcookie('access_token', $data, time() + ($json['expires_in']));
    }

你能告诉我我做错了什么吗?

检查您的 cookie 到期日期,即使令牌可能对有效,cookie 也可能更早过期。

也许把它

分解一下。从最简单的任务开始,让它发挥作用。因此,假设您需要一个 api 调用,使该调用正常工作。当它有效时,继续下一步。

如果 api 调用需要一个秘密令牌,我可以想象你不想把它交给任何用户来存储它作为 cookie。

下一步是身份验证。如果你不仅不熟悉PHP,而且一般的Web应用程序,我会从一些不那么具有挑战性的东西开始。

但是,让我们假设您很快就会掌握它,下一步(永远不会有最后一步)可能是安全决策:用户是否需要执行 api 调用,或者我可以在用户获得授权后通过执行 api 调用服务器端来为用户执行此操作?