예제 #1
0
파일: views.py 프로젝트: a87150/kaku
    def get(self, request, *args, **kwargs):
        template_html = 'account/login.html'

        # 如果申请登陆页面成功后,就会返回code和state
        if 'code' not in request.GET:
            return render(request, template_html)

        code = request.GET('code')
        # 第二步
        # 将得到的code,通过下面的url请求得到access_token
        url = 'https://github.com/login/oauth/access_token'
        data = {
            'grant_type': 'authorization_code',
            'client_id': settings.GITHUB_CLIENTID,
            'client_secret': settings.GITHUB_CLIENTSECRET,
            'code': code,
            'redirect_uri': settings.GITHUB_CALLBACK,
        }

        # 请求参数需要bytes类型
        binary_data = urlencode(data).encode('utf-8')
        # 设置请求返回的数据类型
        headers = {'Accept': 'application/json'}
        req = Request(url, binary_data, headers)
        # json是str类型的,将bytes转成str
        result = json.loads(urlopen(req).read().decode('utf-8'))
        access_token = result['access_token']
        url2 = 'https://api.github.com/user?access_token=%s' % (access_token)
        response = json.loads(urlopen(url2).read().decode('utf-8'))
        print(response)
        username = '******' + str(response['id'])
        password = '******'

        # 如果不存在username,则创建
        try:
            user = User.objects.get(username=username)
        except:
            user = User.objects.create_user(username=username,
                                            password=password)
            user.save()
            user_signed_up.send(sender=self, request=request, user=user)

        # 登陆认证
        user = auth.authenticate(username=username, password=password)
        auth.login(request, user, backend=None)
        user_logged_in.send(sender=self, request=request, user=user)
        return super().get(self, request, *args, **kwargs)
예제 #2
0
    def test_logged_in(self):
        """Test the user-logged-in Allauth signal handling."""
        mock_obj = mock.Mock()

        with mock.patch.object(AllauthSignalListener, "_apply_groups", mock_obj):
            AllauthSignalListener()

            # Don't attempt to apply groups if the user doesn't have a linked Discord account
            user_logged_in.send(DjangoUser, user=self.django_user_discordless)
            mock_obj.assert_not_called()

            # Don't attempt to apply groups if the user hasn't joined the Discord server
            user_logged_in.send(DjangoUser, user=self.django_user_never_joined)
            mock_obj.assert_not_called()

            # Attempt to apply groups if everything checks out
            user_logged_in.send(DjangoUser, user=self.django_user)
            mock_obj.assert_called_with(self.discord_user, self.social_user)
 def test_user_logged_in(self):
     Profile.objects.get(user=self.user).delete()
     with patch('django_mailman3.signals.sync_email_addresses') as sea:
         user_logged_in.send(sender=User, user=self.user)
     self.assertEqual(sea.call_args_list, [call(self.user)])
     self.assertTrue(Profile.objects.filter(user=self.user).exists())