2015-04-04 19 views
1

我刚开始在Django工作,它很棒!用Authomatic验证django - 最佳工作流程

我希望我的web应用程序能够通过他们的twitter帐户访问有限数量的人。为了实现这一点,我使用了插件Authomatic。

This是一个初学者的例子,展示了如何在Django中使用Authomatic。从此,我用下面的代码片段:

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用户没有分配给他们的用户对象。我能想到的唯一的事情是硬编码“允许”用户在我的代码默认,但似乎很狡猾......

编辑:我试图执行阿什温的回答,但是这给了我这样的:

#我们需要适配器的响应对象。 响应=的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) 

首先,我无法想象,这是很好的做法,在我的代码这样的密码writter。第二我得到错误提供者名称“用户名”未指定!

有人知道我在做什么错吗?

回答

0

您可以为所有允许的用户创建单独的用户对象,然后该作业将非常简单。只要检查用户名是否在数据库中可用,验证并登录请求。

+0

感谢您的回答,但如果我没有密码,如何验证这些用户对象? – hY8vVpf3tyR57Xib 2015-04-04 12:03:17

+0

@ user3361028:您可以使用无密码验证。这应该有所帮助:http://stackoverflow.com/questions/2787650/manually-logging-in-a-user-without-password – 2015-04-04 13:30:28