Python Social Auth - 用户通过Facebook验证,但无法访问页面

时间:2017-07-27 09:45:15

标签: django python-3.x python-social-auth

我在使用Python Social Auth进行Facebook身份验证时遇到了问题。

我已登录Facebook,Google和Twitter。

登录后,我使用login_redirect decorator将用户重定向到/ user / dashboard上的仪表板。虽然它适用于Google和Twitter,但我无法重定向通过Facebook验证的用户。

@login_required
def home(request):
    user = ""
    if '_auth_user_id' in request.session:
        user = AuthUser.objects.get(id=request.session['_auth_user_id'])
    template = 'user/index.html'
    return render(request, template, context)

在Settings.py

SOCIAL_AUTH_FACEBOOK_KEY = '******'
SOCIAL_AUTH_FACEBOOK_SECRET = '*******'
SOCIAL_AUTH_FACEBOOK_SCOPE = ['email', 'public_profile', 'user_location']
SOCIAL_AUTH_FACEBOOK_PROFILE_EXTRA_PARAMS = {
    'locale': 'en_US',
    'fields': 'id, name, email, age_range, about, picture, location'
}
SOCIAL_AUTH_FACEBOOK_API_VERSION = '2.10'

当我删除login_required装饰器时,用户被重定向到仪表板。但是当用户试图转到另一个页面时,django表示用户未经过身份验证。这是Facebook API或应用程序的问题吗?

感谢您的回复。

3 个答案:

答案 0 :(得分:0)

1)检查AUTHENTICATION_BACKENDS。 Facebook身份验证后端必须在此列表中。

2)清理Cookie并检查您网站上的Facebook用户is_active

答案 1 :(得分:0)

这是一个快速而肮脏的修复方法。我没有看到所有可能的情况。这个答案可以改进。第一步是从重定向视图中删除需要登录的装饰器。然后在视图中使用以下代码

if request.user.is_anonymous():
    # check if user logged in through facebook, csrf token will be validated by the middleware
    if '_auth_user_id' in request.session:
        auth_user_id = request.session['_auth_user_id']
        user_obj = User.objects.filter(id=auth_user_id)
        request.user = user_obj[0]
        userProfile = model_to_dict(user_obj[0])
    else:
        # redirect user to login page
        return HttpResponseRedirect('/login/') 

答案 2 :(得分:0)

您可能必须更新您的应用许可,才能提供所需的信息(包括电子邮件)。 转到https://developers.facebook.com/tools/explorer/,选择您的应用和要提供的权限。然后生成一个新的测试访问令牌。