Пример #1
0
def social_login_callback(request, sitename):
    """第三方帐号OAuth认证登录,只有设置了USING_SOCIAL_LOGIN=True才会使用到此功能"""
    code = request.GET.get('code', None)

    if not code:
        return HttpResponseRedirect(SOCIAL_LOGIN_ERROR_REDIRECT_URL)

    socialsites = SocialSites(SOCIALOAUTH_SITES)
    try:
        site = socialsites.get_site_object_by_name(sitename)
        site.get_access_token(code)
    except(SocialSitesConfigError, SocialAPIError):
        return HttpResponseRedirect(SOCIAL_LOGIN_ERROR_REDIRECT_URL)

    # 首先根据site_name和site uid查找此用户是否已经在自身网站认证,
    # 如果查不到,表示这个用户第一次认证登陆,创建新用户记录
    # 如果查到,就跟新其用户名和头像
    try:
        user = SocialUser.objects.get(site_uid=site.uid, site_name=site.site_name)
        SiteUser.objects.filter(id=user.user.id).update(username=site.name, avatar_url=site.avatar)
    except SocialUser.DoesNotExist:

        user = SocialUser.objects.create(
            site_uid=site.uid,
            site_name=site.site_name,
            username=site.name,
            avatar_url=site.avatar
        )

    # set uid in session, then this user will be auto login
    request.session['uid'] = user.user.id
    return HttpResponseRedirect(SOCIAL_LOGIN_DONE_REDIRECT_URL)
Пример #2
0
 def _social_sites():
     def make_site(site_class):
         s = socialsites.get_site_object_by_class(site_class)
         return {
             'site_name': s.site_name,
             'site_name_zh': s.site_name_zh,
             'authorize_url': s.authorize_url,
         }
     socialsites = SocialSites(SOCIALOAUTH_SITES)
     return [make_site(site_class) for site_class in socialsites.list_sites_class()]