Lee*_*Lee 6 python django disqus single-sign-on
我正在使用Python和Django登录Disqus.管理员已经确认该帐户已启用SSO并且他们的调试工具确认我的登录令牌是正确的..但是我的配置似乎被忽略..登录按钮没有被替换等等..
以下是JS Disqus实现的示例..
var disqus_shortname = 'outfit418alpha';
var disqus_config = function() {
this.page.remote_auth_s3 = 'eyJ1c2VybmFtZSI6ICJkaXNxdXMiLCAiaWQiOiA1OTEsICJlbWFpbCI6ICJkaXNxdXNAb3V0Zml0NDE4LmNvbSJ9 577222fb9c6d5e03238fb70d29ac1104469e1e85 1390561160';
this.page.api_key = 'jkNAtL6ivcDNjDBbl9RFMy3prUSypfTto1IRlrsaMFXqFauGQlQQHAwOo8R8bRlG';
this.sso = {
url: '/profile/login/',
logout: '/profile/logout/',
}
}
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
Run Code Online (Sandbox Code Playgroud)
谁能指出我在哪里出错?
我们在GitHub上经历了几个代码实现,以便在我们的Django网站中集成Disqus SSO.我们的要求很简单,我们使用了以下工作流程:
在disqus.py中:
import base64
import hashlib
import hmac
import json as simplejson
import time
DISQUS_SECRET_KEY = 'SECRET KEY FROM API'
DISQUS_PUBLIC_KEY = 'PUBLIC KEY FROM API'
def get_disqus_sso(user_id=None, username=None, email=None):
if user_id:
user_data = {
'id': user_id,
'username': username,
'email': email,
}
else:
user_data = {}
# create a JSON packet of our data attributes
data = simplejson.dumps(user_data)
# encode the data to base64
message = base64.b64encode(data)
# generate a timestamp for signing the message
timestamp = int(time.time())
# generate our hmac signature
sig = hmac.HMAC(DISQUS_SECRET_KEY,
'%s %s' % (message, timestamp), hashlib.sha1).hexdigest()
# return a script tag to insert the sso message
return """<script type="text/javascript">
var disqus_config = function() {
this.page.remote_auth_s3 = "%(message)s %(sig)s %(timestamp)s";
this.page.api_key = "%(pub_key)s";
this.sso = {
name: "Screener Talks",
button: "http://www.screener.in/static/img/social/disqus.png",
url: "http://www.screener.in/register/",
logout: "http://www.screener.in/logout/",
};
}
</script>""" % dict(
message=message,
timestamp=timestamp,
sig=sig,
pub_key=DISQUS_PUBLIC_KEY,
)
Run Code Online (Sandbox Code Playgroud)
在views.py中:
def _get_disqus_sso(user):
if user.is_authenticated():
disqus_sso = get_disqus_sso(
user.id,
user.display_name,
user.email, )
else:
disqus_sso = get_disqus_sso()
return disqus_sso
def some_view(request):
...
disqus_sso = _get_disqus_sso(request.user)
return render(request, "template.html", {"disqus_sso": disqus_sso})
Run Code Online (Sandbox Code Playgroud)
在template.html中:
<div id="disqus_thread"></div>
<script type="text/javascript">
var disqus_shortname = 'SITESHORTNAME';
var disqus_identifier = 'POST ID';
var disqus_title = 'POST TITLE';
/* * * DON'T EDIT BELOW THIS LINE * * */
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
<a href="http://disqus.com" class="dsq-brlink">comments powered by <span class="logo-disqus">Disqus</span></a>
{{ disqus_sso|safe }}
Run Code Online (Sandbox Code Playgroud)
大部分代码来自GitHub上的各种代码片段,但遗憾的是我找不到确切的来源.这可能会有所帮助:https://github.com/jumoconnect/openjumo/blob/master/jumodjango/lib/disqus.py
到目前为止,没有足够的信息来找出问题所在,因为所有可用的信息都已检查完毕。为了解决这个问题,我们需要做的是:
remote_auth_s3?threadDetails.json?检查方法如下:http://help.disqus.com/customer/portal/articles/1148640我将根据这些更新答案。
我确实有一些建议来解决我看到的其他一些问题。
首先,看起来您只是缺少一些 SSO 所需的配置变量。这些都是可能的:
this.sso = {
name: "SampleNews",
button: "http://example.com/images/samplenews.gif",
icon: "http://example.com/favicon.png",
url: "http://example.com/login/",
logout: "http://example.com/logout/",
width: "800",
height: "400"
};
Run Code Online (Sandbox Code Playgroud)
其中,name、url、 和logout应至少使用 - 因此请确保包含这些内容。
其次,不要在this.sso配置中使用相对 URL。由于这些 URL 在 iframe(技术上是 disqus.com)内使用,因此某些浏览器会将 URL 解析为http://disqus.com/profile/login/,这显然不会到达预期的位置。
| 归档时间: |
|
| 查看次数: |
1537 次 |
| 最近记录: |