我正在尝试使用simple_salesforce来使用Python查询salesforce数据。我正在使用我的用户名和密码,我100%肯定是正确的。我从登录Salesforce并查看我的公司资料中获得了组织ID。它只有一个15位数的ID。我特意使用orgID来避免使用安全令牌,因为我不知道它是什么。我做错了什么?
代码:
from simple_salesforce import Salesforce
sf = Salesforce(instance_url='https://na1.salesforce.com', session_id='')
sf = Salesforce(password='password', username='email', organizationId='15 digit org id')
输出:
File "C:\Python27\lib\site-packages\simple_salesforce\api.py", line 100, in __init__
proxies=self.proxies)
File "C:\Python27\lib\site-packages\simple_salesforce\login.py", line 124, in SalesforceLogin
code=except_code, message=except_msg))
simple_salesforce.login.SalesforceAuthenticationFailed: INVALID_LOGIN: Invalid username, password, security token; or user locked out.
答案 0 :(得分:6)
我写了大部分simple-salesforce
(虽然不是organizationId
部分,因为我没有要测试的IP白名单帐户)
标准/普通/常规/ 99%的用户应该使用简单的username
,password
,security_token
方法。
这样的事情
from simple_salesforce import Salesforce
sf = Salesforce(username='nick@nickcatalano.com', password='nickspassword', security_token='tokenemailedtonick')
到目前为止,最令人困惑的部分是security_token
部分(并且是我遇到的部分。)事实证明,在成功重置密码后,安全令牌会通过电子邮件发送给您。因此,如果您进入salesforce帐户并重置密码,我相信您最终会收到一封主题为salesforce.com security token confirmation
的电子邮件,其中包含Security Token
个电子邮件。这是你的security_token
。
说实话,security_token
kwarg比任何东西都更方便。在普通email
/ password
/ token
流中,大多数用户依赖于实际发送的内容是email
作为登录名,{password}{security_token}
作为密码。我相信你可以自己结束,如果你愿意,可以传递一个email
和password
kwarg,但我想强迫人们连接密码和令牌本身会违反simple
simple-salesforce
答案 1 :(得分:2)
修改强>
重置密码的方式如何显示令牌是什么?
它会。如果用户之前曾要求安全令牌(通过电子邮件发送给您 - 因此您需要访问与您的用户关联的电子邮件地址) - 每次后续密码重置都将导致生成新令牌并通过电子邮件发送给您。最重要的是,一旦您登录系统(到网络版,而不是通过API),您将可以选择重置您的令牌(再次,这将向您发送电子邮件)。
就像你没有读过或试过我们写过的任何东西一样!
寻找可信和/或官方来源的答案。
https://help.salesforce.com/htviewhelpdoc?id=user_security_token.htm
https://help.salesforce.com/HTViewSolution?id=000004502
https://help.salesforce.com/HTViewSolution?id=000003783
来自图书馆的文档:
https://github.com/neworganizing/simple-salesforce
要使用IP白名单组织ID方法登录,只需使用您的 Salesforce用户名,密码和organizationId
此。如果您的IP地址已列入白名单 - 您不需要令牌。如果它不是 - 您需要生成令牌。周期。
原始回答
我不熟悉那个Python库但是......转到Salesforce - >设置 - >我的个人信息和检查登录历史记录。如果它包含类似"失败的东西:需要安全令牌"然后你搞砸了,将必须使用安全令牌。
我不知道任何使用org id的旁路(我已经通过PHP连接来自PHP,Java,C#......所以如果Python库有一些我会非常惊讶绕过它的神奇方法。你可能习惯于传递会话ID,假设你已经过身份验证并拥有有效的会话。
另一种选择是检查您的IP并将其添加到可信IP范围(它是设置中的一个选项)。例如,当整个办公室具有相同的静态IP时,它是有用的;如果你在家工作,那就没用了。
如果这也不合适 - 您可能希望查找使用OAuth2而不是常规SOAP API进行身份验证的库。
答案 2 :(得分:2)
虽然这有点晚了,但是有人在寻找同样的问题可能对我的所作所为有所帮助。
我也很难添加公司ID,但问题是,除非您是自助服务用户,否则公司ID可能是空白的。
sf = Salesforce(password='password', username='email', organizationId='')
正如其他用户提到的那样,请确保您使用的是IP-White列表,否则它将无效。
答案 3 :(得分:1)
安全令牌是自动生成的密钥,您必须将其添加到密码的末尾才能从不受信任的网络登录Salesforce。例如,如果您的密码是mypassword,而您的安全令牌是XXXXXXXXXX,那么您必须输入mypasswordXXXXXXXXXX才能登录。无论您是通过API登录还是桌面客户端(如Connect for Outlook,Connect Offline,Connect),都需要安全令牌。 for Office,Connect for Lotus Notes或Data Loader。
要重置安全令牌:
答案 4 :(得分:1)
是一种只使用用户名和密码登录simple-salesforce的方法。无需安全令牌:
from simple_salesforce import Salesforce, SalesforceLogin
session_id, instance = SalesforceLogin(username='<user>', password='<pass>')
sf = Salesforce(instance=instance, session_id=session_id)
# Logged in! Now perform API actions, SOQL queries, etc.
sf.query_all('<soql>')
使用simple-salesforce的所有示例都以调用Salesforce
构造函数开始登录。此构造函数接受现有会话ID或身份验证凭据以登录并创建新会话。登录时,它会调用较低级别的SalesforceLogin
函数来完成实际工作,但有趣的是SalesforceLogin
不会对其参数强制执行相同的约束 - 它会发出正确的SOAP调用以仅使用用户名和密码,无需令牌或组织ID。
使用此技巧,我们直接调用SalesforceLogin
,获取新的会话ID,然后将其直接传递给Salesforce
构造函数。从那时起,我们就可以进行经过身份验证的API请求。
PyPI上的simple-salesforce版本(即pip install simple-salesforce
)已经过时了simple-salesforce GitHub存储库。最新版本支持其他登录参数,例如domain
,用于使用自定义域登录。要获取最新版本,请使用
pip install --upgrade https://github.com/simple-salesforce/simple-salesforce/archive/master.zip
(从this answer中注明,从zip开始安装比使用git+ssh://
或git+https://
更快。)
答案 5 :(得分:0)
登录时需要安全令牌。 每当重置密码时,您的安全令牌也会重置。 如果您没有令牌而无法重置令牌。 尝试更改密码。
感谢。
答案 6 :(得分:0)
我能够测试这是否正在使用我的安全令牌对开发人员组织没有任何问题。这都是作为没有管理员权限的标准用户完成的。使用OrgId失败了。
通过重置密码,我收到了一个新的安全令牌。
用户名=登录您的实例。 密码=您的密码
以下代码可让您登录。</ p> 来自simple_salesforce的
导入Salesforce
sf = Salesforce(用户名='用户名',密码='密码',security_token ='重设密码中的任何内容')
答案 7 :(得分:0)
如果您的ip被列入白名单/受信任,并且您仍未使用该令牌获得无效的登录名,则必须在连接字符串中包含security_token =''才能使其正常工作。
sf = Salesforce(username='USERNAME', password='PASSWORD', security_token='')