Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django Python Social Auth-用户已通过facebook验证,但无法访问页面_Django_Python 3.x_Python Social Auth - Fatal编程技术网

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

Django Python Social Auth-用户已通过facebook验证,但无法访问页面,django,python-3.x,python-social-auth,Django,Python 3.x,Python Social Auth,我对使用Python Social Auth进行Facebook身份验证存在问题 我已经登录了Facebook、Google和Twitter 登录后,我使用login\u redirect decorator将用户重定向到位于/user/dashboard的仪表板。虽然它在谷歌和Twitter上运行良好,但我无法重定向通过Facebook验证的用户 @login_required def home(request): user = "" if '_auth_user_id' in

我对使用Python Social Auth进行Facebook身份验证存在问题

我已经登录了Facebook、Google和Twitter

登录后,我使用login\u redirect decorator将用户重定向到位于/user/dashboard的仪表板。虽然它在谷歌和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'
当我删除登录所需的装饰器时,用户被重定向到仪表板。但当用户试图转到另一个页面时,django说用户没有经过身份验证。这是Facebook API还是应用程序的问题

感谢您的回复。

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

2) 清理cookies并检查站点上的facebook用户。

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


2) 清理cookies并检查您站点上的facebook用户。

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

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/') 

这里有一个快速而肮脏的解决方案。我没有考虑所有可能的情况。这个答案可以改进。第一步是从重定向视图中去掉登录所需的装饰器。然后在视图中使用以下代码

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/') 

您可能需要更新应用程序权限以提供所需的信息(包括电子邮件)。
转到,选择你的应用程序和要提供的权限。然后生成一个新的测试访问令牌。

您可能需要更新应用程序权限以提供所需的信息(包括电子邮件)。
转到,选择你的应用程序和要提供的权限。然后生成一个新的测试访问令牌。

我的身份验证后端中有“social.backends.facebook.facebookouth2”。用户处于活动状态,我清理了cookies。这就是我被这个问题难倒的原因。试着将facebook api版本降级为“2.9”,并检查服务器日志以了解这两个版本是否存在错误,但都没有成功。很抱歉,我没有什么可以实际显示的内容。我的身份验证\u后端中有“social.backends.facebook.facebookouth2”。用户处于活动状态,我清理了cookies。这就是我被这个问题难倒的原因。试着将facebook api版本降级为“2.9”,并检查服务器日志以了解这两个版本是否存在错误,但都没有成功。很抱歉,我没有什么可以展示的。我也遇到了同样的问题。你找到解决这个问题的办法了吗。我看到的是,在重定向之前,登录用户被设置为匿名。需要登录的decorator正好捕捉到了这一点。如果您重定向到一个不需要登录的页面,则重定向可以工作,但用户仍然是匿名的!!没有,我暂时删除了Facebook登录。仍在寻找解决方案。遇到同样的问题。你找到解决这个问题的办法了吗。我看到的是,在重定向之前,登录用户被设置为匿名。需要登录的decorator正好捕捉到了这一点。如果您重定向到一个不需要登录的页面,则重定向可以工作,但用户仍然是匿名的!!没有,我暂时删除了Facebook登录。仍在寻找解决方案。