我刚开始在Django工作,真棒!
我希望我的网络应用程序可以通过他们的Twitter帐户访问有限数量的人。为了实现这一点,我使用了插件Authomatic。
This是一个首发示例,展示了如何在Django中使用Authomatic。从这里,我使用以下代码snippit:
def login(request, provider_name):
# We we need the response object for the adapter.
response = HttpResponse()
# Start the login procedure.
result = authomatic.login(DjangoAdapter(request, response), provider_name)
if result:
response.write('<a href="..">Home</a>')
elif result.user:
if not (result.user.name and result.user.id):
result.user.update()
var username = result.user.name
var id = result.user.id
return response
我的问题如下:在检查用户名是否是允许的Twitter用户之一后,如何登录以便用户可以浏览所有受保护的页面?我习惯使用这样的东西:
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
但问题是Twitter用户没有分配给他们的User对象。我唯一能想到的就是在我的代码中硬编码默认的“允许”用户,但这看起来很狡猾......
编辑:我试图实施Ashwin的答案,但这给了我这个:#我们需要适配器的响应对象。 response = HttpResponse()
# Start the login procedure.
result = authomatic.login(DjangoAdapter(request, response), provider_name)
if result:
response.write('<a href="..">Home</a>')
if result.error:
# Login procedure finished with an error.
response.write('<h2>Damn that error: {0}</h2>'.format(result.error.message))
elif result.user:
# We need to update the user to get more info.
if not (result.user.name and result.user.id):
result.user.update()
# Welcome the user.
response.write(u'<h1>Hi {0}</h1>'.format(result.user.name))
response.write(u'<h2>Your id is: {0}</h2>'.format(result.user.id))
response.write(u'<h2>Your email is: {0}</h2>'.format(result.user.email))
# if result.user.id == 110740012624414845989:
uname = result.user.id
pwd = '** RANDOM PASSOWRD I SHOULD HAVE? **'
user = authenticate(username=uname, password=pwd)
login(request, user)
首先,我无法想象在我的代码中使用密码写入是一种好习惯。第二,我得到错误提供商名称“用户名”未指定!
有人知道我做错了什么吗?
答案 0 :(得分:0)
您可以为所有允许的用户创建单独的User对象,然后该作业将非常简单。只需检查数据库中是否有用户名,验证并登录请求。