- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在用 python 编写一个应用程序,它使用 OAuth/REST 等访问 Magento 服务器。
OAuth 身份验证已完成,我有两个消费者 token 和 2 个访问 token 。在 Magento 本身中,我遵循了许多博客中概述的配置步骤 - 设置 REST 角色、属性和使用者以及用户权限和角色。我已经检查了 500 次(感觉就是这样!)并且看不到任何错误,用户正在使用已授权 token 的 REST 使用者,用户的角色是管理员,等等。
在完成 OAuth 流程后,我尝试将产品发布到 Magento(其数据库为空)并收到 403 访问被拒绝时,我注意到出现了问题。 Get 尝试收到相同的结果。我为 Guest 启用了 REST API 访问,现在 Get 收到一个空的 json 数组,当然 Post 仍然有 403 - 这告诉我 Magento 没有查看 OAuth token 并让我登录。
Magento 似乎拒绝接受它在 OAuth 身份验证过程中生成的消费者/访问 token 。
是否有我错过的配置步骤,或者是否有任何信息可以提供克服此障碍的方法?
编辑:下面添加的代码片段显示了我用来查询 Magento 的方法:-
from rauth.session import OAuth1Session
session = OAuth1Session(consumer_key, consumer_secret, access_key, access_secret)
headers = {'Content-Type': 'application/json', 'Accept': 'application/json'}
r = session.get('http://mysite.com/api/rest/products', headers=headers)
print r.json()
输出:{u'messages':{u'error':[{u'message':u'访问被拒绝',u'code':403}]}}
最佳答案
经过几个小时的思考这个问题,我终于意识到为什么我们中的一些人会遇到以下错误:
Invalid auth/bad request (got a 403, expected HTTP/1.1 20X or a redirect)
{"messages":{"error":[{"code":403,"message":"Access denied"}]}}
即使在成功授权管理员/客户之后。
不幸的是,问题不在于 Magento,而很可能是您的服务器配置。
我开始研究 Magento Api2 代码,并意识到他们正在利用 Zend_Controller_Request_Http 方法“getHeader”来检查 oAuth 授权。
以下是“getHeader()”的代码
public function getHeader($header)
{
if (empty($header)) {
#require_once 'Zend/Controller/Request/Exception.php';
throw new Zend_Controller_Request_Exception('An HTTP header name is required');
}
// Try to get it from the $_SERVER array first
$temp = 'HTTP_' . strtoupper(str_replace('-', '_', $header));
if (isset($_SERVER[$temp])) {
return $_SERVER[$temp];
}
// This seems to be the only way to get the Authorization header on
// Apache
if (function_exists('apache_request_headers')) {
$headers = apache_request_headers();
if (isset($headers[$header])) {
return $headers[$header];
}
$header = strtolower($header);
foreach ($headers as $key => $value) {
if (strtolower($key) == $header) {
return $value;
}
}
}
return false;
}
由 Magento 类“Mage_Api2_Model_Auth_Adapter_Oauth”传递给此函数的是:
public function isApplicableToRequest(Mage_Api2_Model_Request $request)
{
$headerValue = $request->getHeader('Authorization');
return $headerValue && 'oauth' === strtolower(substr($headerValue, 0, 5));
}
由于“$request->getHeader('Authorization') 被调用,这意味着 getHeader 函数中的 $header var 是“Authorization”
// Try to get it from the $_SERVER array first
$temp = 'HTTP_' . strtoupper(str_replace('-', '_', $header));
if (isset($_SERVER[$temp])) {
return $_SERVER[$temp];
}
然后,Zend 类将“Authorization”转换为“HTTP_AUTHORIZATION”,并在 $_SERVER 数组中查找它,这就是问题所在,因为在该数组中,Authorization 值位于“$_SERVER['Authorization']”中不是“$_SERVER['HTTP_AUTHORIZATION"]”,它们这样做是因为 CONTENT_TYPE 等其他变量存储为 HTTP_CONTENT_TYPE,授权除外。
但是,Zend 似乎意识到了这一点,因此他们编写了以下代码:
// This seems to be the only way to get the Authorization header on
// Apache
if (function_exists('apache_request_headers')) {
$headers = apache_request_headers();
if (isset($headers[$header])) {
return $headers[$header];
}
$header = strtolower($header);
foreach ($headers as $key => $value) {
if (strtolower($key) == $header) {
return $value;
}
}
}
这里的问题是,许多服务器没有启用“apache_request_headers”,如果您遇到此问题,则可能是您的托管公司禁用了“apache_request_headers”。
这里有两种解决方案:
替换:
$temp = 'HTTP_' . strtoupper(str_replace('-', '_', $header));
与:
$temp = ($header == 'Authorization') ? $header : 'HTTP_' . strtoupper(str_replace('-', '_', $header));
关于Magento REST API,用户授予管理员角色,但仅授予访客访问权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18148145/
我正在尝试为访问者获取真实IP 当我在 php 中回显时,它为我获取了我的真实IP echo $_SERVER['REMOTE_ADDRESS']; 但是当我尝试在 jQuery 中执行此操作时: $
我目前正在尝试在 Antlr4 Visitor 的帮助下开发一个 JavaScript 编译器。我已经用 Java 实现了这个,但无法弄清楚如何在 JavaScript 中执行此操作。也许有人可以回答
跟踪有多少用户和 guest 在线的最佳方法是什么?我正在制作一个有趣和学习的论坛 现在,我在用户表中有 2 个字段,名为 is_online 和 last_access_time。 如果当前时间是
如何在 Magento 中获取访客 ID?我在管理中的“客户”>“ guest ”下看到它,但如何将其打印在前端的页面上? 我为老客户找到了这个: getId(); ?> 最佳答案 $visitorD
您好,我想为客人设置 session ,我编写了应该执行此操作的脚本,并且确实如此,但仅插入到表部分...我不知道为什么脚本不想设置 session ,如果他拥有所有信息。 最佳答案 在第二个查询中
我想通过继承扩展已声明的访问者,并让运行时环境搜索访问者的后代以执行正确的方法。我可以在 C# 中使用它,但我希望在 C++ 中使用它。我在 g++ 中尝试了以下代码,但未调用后代方法;仅调用基类的方
本文实例讲述了php获取指定(访客)IP所有信息(地址、邮政编码、国家、经纬度等)的方法。分享给大家供大家参考。具体如下: 调用方法非常简单。这个也需要数据库来支持。数据库中中文和拼音共存才可以。
我知道这可以在 mysql 中完成,但我希望将 IP 存储在 php 或文本文件中,这对我来说有点困难,因为我不太理解它。 $SESSION 是用来记录日志的,但是如何在点击 html 按钮后将其存储
我正在创建一个 friend 系统,当用户访问另一个用户的个人资料时,他们会看到一个添加 friend 选项,当他们访问自己的个人资料时,他们可以看到其他东西而不是添加 friend 选项,如 TOT
我在我的 Windows 7 机器上使用 VMware 播放器将 Ubuntu 作为 guest 操作系统运行。我遇到的问题是在 Ubuntu 机器上同步时钟。仅当我关闭 VMware 播放器并打开暂
我正在使用虚拟机管理程序。在此我有 DOM0 操作系统,它正在使用 ttyS08250串口驱动。 在此操作系统上,我正在运行一个设备管理器应用程序,该应用程序启动 DOMU 内核,该内核在 8250
我已经在使用 Hyper-V 的 Windows 10 主机系统上安装了 Ubuntu 18.04 作为 guest 系统,我想在全屏模式下使用 guest 系统。据我所知,要调整屏幕大小,我需要在增
MySQL 服务器上的访客数据库如下所示id 是主键整数类型,firstname 和 lastname 是文本类型,访客 id 是整数类型 id firstname lastname
我是一名优秀的程序员,十分优秀!