10

我正在尝试使用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.
4

8 回答 8

9

我写了大部分simple-salesforce(虽然不是organizationId部分,因为我没有 IP 白名单帐户可以测试)

standard/vanilla/regular/99% 的用户应该使用的版本是 simple 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_tokenkwarg 比什么都方便。在大多数用户所依赖的正常流程emailpassword,实际发送的内容是登录名和密码。我相信你可以自己连接它,如果你愿意,只需传入 a和kwarg,但我认为强迫人们自己连接密码和令牌会违背部分tokenemail{password}{security_token}emailpasswordsimplesimple-salesforce

于 2014-11-30T03:56:35.203 回答
6

一种方法可以仅使用用户名和密码使用 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 调用以仅使用用户名和密码登录,而不需要令牌或组织标识。

使用这个技巧,我们SalesforceLogin直接调用,获取新的会话 ID,然后将它直接传递给Salesforce构造函数。从那时起,我们就可以发出经过身份验证的 API 请求。

笔记

PyPI 上的 simple-salesforce 版本(即)与simple-salesforce GitHub 存储库相比pip install simple-salesforce非常过时。最新版本支持额外的登录参数,例如使用自定义域登录。要获取最新版本,请使用domain

pip install --upgrade https://github.com/simple-salesforce/simple-salesforce/archive/master.zip

(如this answer中所述,从 zip 安装 Pip 比使用git+ssh://or更快。)git+https://

于 2018-04-03T02:29:13.623 回答
3

编辑

重置密码将如何显示令牌是什么?

它只会。如果用户曾经请求过安全令牌(通过电子邮件发送给您 - 因此您需要访问与您的用户关联的电子邮件地址) - 每次后续密码重置都会生成新令牌并通过电子邮件发送给您。最重要的是,一旦您登录到系统(登录到网络版本,而不是通过 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 用户名、密码和组织 ID

这。如果您的 IP 地址被列入白名单 - 您不需要令牌。如果不是 - 您需要生成令牌。时期。


原始答案

我不熟悉那个 Python 库,但是... 转到 Salesforce -> 设置 -> 我的个人信息并检查登录历史记录。如果它包含诸如“失败:需要安全令牌”之类的内容,那么您就完蛋了,您不得不使用安全令牌。

我不知道有任何使用 org id 的绕过(我已经通过 PHP、Java、C# 的 API 进行了连接......所以如果那个 Python 库有一些神奇的方法可以绕过它,我会感到非常惊讶。你可能是用于传递假设您已通过身份验证并具有有效会话的会话 ID。

另一种选择是检查您的 IP 并将其添加到受信任的 IP 范围(这是设置中的一个选项)。例如,当整个办公室具有相同的静态 IP 时,它很有用;如果您在家工作,则用处不大。

如果这也是不行的 - 您可能想要寻找使用 OAuth2 而不是常规 SOAP API 进行身份验证的库。

于 2014-08-05T18:56:33.000 回答
3

尽管这有点晚了,但是对于我所做的事情,可能会帮助寻找同样问题的人。

我也很难添加公司 ID,但这里的问题是,除非您是自助服务用户,否则公司 ID 可以为空白。

sf = Salesforce(password='password', username='email', organizationId='')

正如其他用户所提到的,请确保您使用的是 IP 白名单,否则它将不起作用。

于 2016-01-05T22:45:18.600 回答
1

安全令牌是自动生成的密钥,您必须将其添加到密码末尾,以便从不受信任的网络登录 Salesforce。例如,如果您的密码是 mypassword,而您的安全令牌是 XXXXXXXXXX,那么您必须输入 mypasswordXXXXXXXXXX 才能登录。无论您是通过 API 登录还是通过 Connect for Outlook、Connect Offline、Connect 等桌面客户端登录,都需要安全令牌Office、Connect for Lotus Notes 或 Data Loader。

要重置您的安全令牌:

  • 在任何 Salesforce 页面的顶部,单击您的姓名旁边的向下箭头。从您的名字下的菜单中,选择设置或我的设置——无论出现哪个。
  • 从左侧窗格中,选择以下选项之一:
    • 如果您单击设置,请选择我的个人信息 | 重置我的保安编码器。
    • 如果您单击了我的设置,请选择个人 | 重置我的保安编码器。
  • 单击重置安全令牌按钮。新的安全令牌通过电子邮件发送到您的 Salesforce 用户记录中的电子邮件地址。
于 2014-08-08T00:08:37.297 回答
1

如果您的 ip 被列入白名单/受信任,并且您仍然无法使用令牌登录,则必须在连接字符串中包含 security_token='' 才能使其正常工作。

sf = Salesforce(username='USERNAME', password='PASSWORD', security_token='')
于 2019-02-14T23:10:34.633 回答
0

需要安全令牌才能登录。每当您的密码被重置时,您的安全令牌也会被重置。如果您没有令牌并且无法重置它。尝试更改您的密码。

谢谢。

于 2014-08-08T13:55:15.870 回答
0

我能够测试这是否与我的安全令牌一起针对开发人员组织而没有问题。这一切都是作为没有管理员权限的标准用户完成的。使用 OrgId 失败了。

通过重置我的密码,我收到了一个新的安全令牌。

用户名 = 您的实例的登录名。密码 = 你的密码

下面的代码应该让您登录。

从 simple_salesforce 导入 Salesforce

sf = Salesforce(username='username',password='password', security_token='whatever come in reset password')

于 2014-08-20T16:49:09.607 回答