使用Authomatic验证django - 最佳工作流程

时间:2015-04-04 01:25:12

标签: python django

我刚开始在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)

首先,我无法想象在我的代码中使用密码写入是一种好习惯。第二,我得到错误提供商名称“用户名”未指定!

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

1 个答案:

答案 0 :(得分:0)

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