示例#1
0
 def post(self, request, *args, **kwargs):
     data = dict(list(request.GET.items()) + list(request.POST.items()))
     if self.provider.endpoint:
         data['openid'] = self.provider.endpoint
     form = LoginForm(data)
     if form.is_valid():
         client = _openid_consumer(request)
         try:
             auth_request = client.begin(form.cleaned_data['openid'])
             if QUERY_EMAIL:
                 sreg = SRegRequest()
                 for name in SRegFields:
                     sreg.requestField(field_name=name, required=True)
                 auth_request.addExtension(sreg)
                 ax = FetchRequest()
                 for name in AXAttributes:
                     ax.add(AttrInfo(name, required=True))
                 auth_request.addExtension(ax)
             callback_url = reverse(self.callback_view)
             SocialLogin.stash_state(request)
             redirect_url = auth_request.redirectURL(
                 request.build_absolute_uri('/'),
                 request.build_absolute_uri(callback_url))
             return HttpResponseRedirect(redirect_url)
         # UnicodeDecodeError:
         # see https://github.com/necaris/python3-openid/issues/1
         except (UnicodeDecodeError, DiscoveryFailure) as e:
             if request.method == 'POST':
                 form._errors["openid"] = form.error_class([e])
             else:
                 return render_authentication_error(request,
                                                    self.provider.id,
                                                    exception=e)
     return render(request, self.template_name, {'form': form})
示例#2
0
def login(request):
    if 'openid' in request.GET or request.method == 'POST':
        form = LoginForm(request.REQUEST)
        if form.is_valid():
            client = _openid_consumer(request)
            try:
                auth_request = client.begin(form.cleaned_data['openid'])
                if QUERY_EMAIL:
                    sreg = SRegRequest()
                    sreg.requestField(field_name=SRegField.EMAIL,
                                      required=True)
                    auth_request.addExtension(sreg)
                    ax = FetchRequest()
                    ax.add(AttrInfo(AXAttribute.CONTACT_EMAIL,
                                    required=True))
                    auth_request.addExtension(ax)
                callback_url = reverse(callback)
                SocialLogin.stash_state(request)
                redirect_url = auth_request.redirectURL(
                    request.build_absolute_uri('/'),
                    request.build_absolute_uri(callback_url))
                return HttpResponseRedirect(redirect_url)
            # UnicodeDecodeError:
            # see https://github.com/necaris/python3-openid/issues/1
            except (UnicodeDecodeError, DiscoveryFailure) as e:
                if request.method == 'POST':
                    form._errors["openid"] = form.error_class([e])
                else:
                    return render_authentication_error(request)
    else:
        form = LoginForm()
    d = dict(form=form)
    return render_to_response('openid/login.html',
                              d, context_instance=RequestContext(request))
示例#3
0
    def perform_openid_auth(self, form):
        if not form.is_valid():
            return form

        request = self.request
        provider = self.provider(request)
        endpoint = form.cleaned_data["openid"]
        client = self.get_client(provider, endpoint)
        realm = self.get_realm(provider)

        auth_request = client.begin(endpoint)
        if QUERY_EMAIL:
            sreg = SRegRequest()
            for name in SRegFields:
                sreg.requestField(field_name=name, required=True)
            auth_request.addExtension(sreg)
            ax = FetchRequest()
            for name in AXAttributes:
                ax.add(AttrInfo(name, required=True))
            provider = OpenIDProvider(request)
            server_settings = provider.get_server_settings(
                request.GET.get("openid"))
            extra_attributes = server_settings.get("extra_attributes", [])
            for _, name, required in extra_attributes:
                ax.add(AttrInfo(name, required=required))
            auth_request.addExtension(ax)

        SocialLogin.stash_state(request)

        # Fix for issues 1523 and 2072 (github django-allauth)
        if "next" in form.cleaned_data and form.cleaned_data["next"]:
            auth_request.return_to_args["next"] = form.cleaned_data["next"]
        redirect_url = auth_request.redirectURL(
            realm, request.build_absolute_uri(self.get_callback_url()))
        return HttpResponseRedirect(redirect_url)
示例#4
0
def login(request):
    if 'openid' in request.GET or request.method == 'POST':
        form = LoginForm(request.REQUEST)
        if form.is_valid():
            client = _openid_consumer(request)
            try:
                auth_request = client.begin(form.cleaned_data['openid'])
                if QUERY_EMAIL:
                    sreg = SRegRequest()
                    sreg.requestField(field_name=SRegField.EMAIL,
                                      required=True)
                    auth_request.addExtension(sreg)
                    ax = FetchRequest()
                    ax.add(AttrInfo(AXAttribute.CONTACT_EMAIL, required=True))
                    auth_request.addExtension(ax)
                callback_url = reverse(callback)
                SocialLogin.stash_state(request)
                redirect_url = auth_request.redirectURL(
                    request.build_absolute_uri('/'),
                    request.build_absolute_uri(callback_url))
                return HttpResponseRedirect(redirect_url)
            # UnicodeDecodeError:
            # see https://github.com/necaris/python3-openid/issues/1
            except (UnicodeDecodeError, DiscoveryFailure) as e:
                if request.method == 'POST':
                    form._errors["openid"] = form.error_class([e])
                else:
                    return render_authentication_error(request)
    else:
        form = LoginForm()
    d = dict(form=form)
    return render_to_response('openid/login.html',
                              d,
                              context_instance=RequestContext(request))
示例#5
0
 def dispatch(self, request):
     """
     Redirects to the CAS server login page.
     """
     action = request.GET.get('action', AuthAction.AUTHENTICATE)
     SocialLogin.stash_state(request)
     client = self.get_client(request, action=action)
     return HttpResponseRedirect(client.get_login_url())
示例#6
0
 def dispatch(self, request):
     callback_url = reverse(self.adapter.provider_id + "_callback")
     SocialLogin.stash_state(request)
     client = self._get_client(request, callback_url)
     try:
         return client.get_redirect()
     except OAuthError:
         return render_authentication_error(request)
示例#7
0
 def dispatch(self, request):
     callback_url = reverse(self.adapter.provider_id + "_callback")
     SocialLogin.stash_state(request)
     client = self._get_client(request, callback_url)
     try:
         return client.get_redirect()
     except OAuthError:
         return render_authentication_error(request)
示例#8
0
def login(request):
    if 'openid' in request.GET or request.method == 'POST':
        form = LoginForm(
            dict(list(request.GET.items()) + list(request.POST.items()))
        )
        if form.is_valid():
            client = _openid_consumer(request)
            provider = OpenIDProvider(request)
            realm = provider.get_settings().get(
                'REALM',
                request.build_absolute_uri('/'))
            try:
                auth_request = client.begin(form.cleaned_data['openid'])
                if QUERY_EMAIL:
                    sreg = SRegRequest()
                    for name in SRegFields:
                        sreg.requestField(field_name=name,
                                          required=True)
                    auth_request.addExtension(sreg)
                    ax = FetchRequest()
                    for name in AXAttributes:
                        ax.add(AttrInfo(name,
                                        required=True))
                    provider = OpenIDProvider(request)
                    server_settings = \
                        provider.get_server_settings(request.GET.get('openid'))
                    extra_attributes = \
                        server_settings.get('extra_attributes', [])
                    for _, name, required in extra_attributes:
                        ax.add(AttrInfo(name,
                                        required=required))
                    auth_request.addExtension(ax)
                callback_url = reverse(callback)
                SocialLogin.stash_state(request)
                # Fix for issues 1523 and 2072 (github django-allauth)
                if 'next' in form.cleaned_data and form.cleaned_data['next']:
                    auth_request.return_to_args['next'] = \
                        form.cleaned_data['next']
                redirect_url = auth_request.redirectURL(
                    realm,
                    request.build_absolute_uri(callback_url))
                return HttpResponseRedirect(redirect_url)
            # UnicodeDecodeError:
            # see https://github.com/necaris/python3-openid/issues/1
            except (UnicodeDecodeError, DiscoveryFailure) as e:
                if request.method == 'POST':
                    form._errors["openid"] = form.error_class([e])
                else:
                    return render_authentication_error(
                        request,
                        OpenIDProvider.id,
                        exception=e)
    else:
        form = LoginForm(initial={'next': request.GET.get('next'),
                                  'process': request.GET.get('process')})
    d = dict(form=form)
    return render(request, "openid/login.html", d)
示例#9
0
文件: views.py 项目: alexgarciac/COPO
 def dispatch(self, request):
     callback_url = reverse(self.adapter.provider_id + "_callback")
     SocialLogin.stash_state(request)
     action = request.GET.get("action", AuthAction.AUTHENTICATE)
     provider = self.adapter.get_provider()
     auth_url = provider.get_auth_url(request, action) or self.adapter.authorize_url
     client = self._get_client(request, callback_url)
     try:
         return client.get_redirect(auth_url)
     except OAuthError as e:
         return render_authentication_error(request, self.adapter.provider_id, exception=e)
示例#10
0
    def dispatch(self, request):
        if 'openid' in request.GET or request.method == 'POST':
            form = LoginForm(
                dict(list(request.GET.items()) + list(request.POST.items())))
            if form.is_valid():
                client = _openid_consumer(request)
                try:
                    auth_request = client.begin(form.cleaned_data['openid'])
                    provider = self.provider
                    app = provider.get_app(request)

                    if QUERY_EMAIL:
                        sreg = SRegRequest()
                        for name in SRegFields:
                            sreg.requestField(field_name=name, required=True)
                        auth_request.addExtension(sreg)
                        ax = FetchRequest()
                        for name in AXAttributes:
                            ax.add(AttrInfo(name, required=True))
                        server_settings = provider.get_server_settings(
                            request.GET.get('openid'))
                        extra_attributes = server_settings.get(
                            'extra_attributes', [])
                        for _, name, required in extra_attributes:
                            ax.add(AttrInfo(name, required=required))
                        auth_request.addExtension(ax)

                    callback_url = provider.get_callback_url(request, app)
                    SocialLogin.stash_state(request)
                    # https://github.com/pennersr/django-allauth/issues/1523
                    auth_request.return_to_args['next'] = \
                        form.cleaned_data.get('next', '/')
                    redirect_url = auth_request.redirectURL(
                        request.build_absolute_uri('/'),
                        request.build_absolute_uri(callback_url))
                    return HttpResponseRedirect(redirect_url)
                # UnicodeDecodeError:
                # see https://github.com/necaris/python3-openid/issues/1
                except (UnicodeDecodeError, DiscoveryFailure) as e:
                    if request.method == 'POST':
                        form._errors["openid"] = form.error_class([e])
                    else:
                        return render_authentication_error(request,
                                                           self.provider.id,
                                                           exception=e)
        else:
            form = LoginForm(
                initial={
                    'next': request.GET.get('next'),
                    'process': request.GET.get('process')
                })
        d = dict(form=form)
        return render(request, "openid/login.html", d)
示例#11
0
 def dispatch(self, request):
     provider = self.provider
     callback_url = reverse(provider.slug + "_callback")
     SocialLogin.stash_state(request)
     action = request.GET.get('action', AuthAction.AUTHENTICATE)
     auth_url = provider.get_auth_url(request, action) or provider.get_authorize_url(request)
     auth_params = provider.get_auth_params(request, action)
     client = self._get_client(request, callback_url)
     try:
         return client.get_redirect(auth_url, auth_params)
     except OAuthError as e:
         return render_authentication_error(request, provider.slug, exception=e)
示例#12
0
 def dispatch(self, request):
     callback_url = reverse(self.adapter.provider_id + "_callback")
     SocialLogin.stash_state(request)
     action = request.GET.get('action', AuthAction.AUTHENTICATE)
     provider = self.adapter.get_provider()
     auth_url = provider.get_auth_url(request, action) \
         or self.adapter.authorize_url
     client = self._get_client(request, callback_url)
     try:
         return client.get_redirect(auth_url)
     except OAuthError:
         return render_authentication_error(request)
示例#13
0
def login(request):
    app = providers.registry.by_id(
        DraugiemProvider.id, request).get_app(request)
    redirect_url = request.build_absolute_uri(reverse(callback))
    redirect_url_hash = md5((
        app.secret + redirect_url).encode('utf-8')).hexdigest()
    params = {
        'app': app.client_id,
        'hash': redirect_url_hash,
        'redirect': redirect_url,
    }
    SocialLogin.stash_state(request)
    return HttpResponseRedirect('%s?%s' % (AUTHORIZE_URL, urlencode(params)))
示例#14
0
 def dispatch(self, request):
     callback_url = reverse(self.adapter.provider_id + "_callback")
     SocialLogin.stash_state(request)
     action = request.GET.get('action', AuthAction.AUTHENTICATE)
     provider = self.adapter.get_provider()
     auth_url = provider.get_auth_url(request, action) or self.adapter.authorize_url
     client = self._get_client(request, callback_url)
     try:
         return client.get_redirect(auth_url)
     except OAuthError as e:
         return render_authentication_error(request, {'error': e.message})
     except Exception as ex:
         send_social_connection_error_email(request, {'error': ex.message})
示例#15
0
def login(request):
    app = providers.registry.by_id(DraugiemProvider.id,
                                   request).get_app(request)
    redirect_url = request.build_absolute_uri(reverse(callback))
    redirect_url_hash = md5(
        (app.secret + redirect_url).encode("utf-8")).hexdigest()
    params = {
        "app": app.client_id,
        "hash": redirect_url_hash,
        "redirect": redirect_url,
    }
    SocialLogin.stash_state(request)
    return HttpResponseRedirect("%s?%s" % (AUTHORIZE_URL, urlencode(params)))
示例#16
0
 def dispatch(self, request):
     app = self.provider.get_app(request)
     redirect_url = request.build_absolute_uri(
         reverse(self.provider.callback_view))
     redirect_url_hash = md5(
         (app.secret + redirect_url).encode('utf-8')).hexdigest()
     params = {
         'app': app.client_id,
         'hash': redirect_url_hash,
         'redirect': redirect_url,
     }
     SocialLogin.stash_state(request)
     return HttpResponseRedirect('%s?%s' %
                                 (AUTHORIZE_URL, urlencode(params)))
示例#17
0
 def login(self, request, *args, **kwargs):
     callback_url = reverse(self.adapter.provider_id + "_callback")
     SocialLogin.stash_state(request)
     action = request.GET.get("action", AuthAction.AUTHENTICATE)
     provider = self.adapter.get_provider()
     auth_url = provider.get_auth_url(request, action) or self.adapter.authorize_url
     auth_params = provider.get_auth_params(request, action)
     client = self._get_client(request, callback_url)
     try:
         return client.get_redirect(auth_url, auth_params)
     except OAuthError as e:
         return render_authentication_error(
             request, self.adapter.provider_id, exception=e
         )
示例#18
0
def login(request):
    app = providers.registry.by_id(DraugiemProvider.id).get_app(request)
    request_scheme = request.META['wsgi.url_scheme']
    request_host = request.META['HTTP_HOST']
    request_path = reverse(callback)
    redirect_url = '%s://%s%s' % (request_scheme, request_host, request_path)
    redirect_url_hash = md5((
        app.secret + redirect_url).encode('utf-8')).hexdigest()
    params = {
        'app': app.client_id,
        'hash': redirect_url_hash,
        'redirect': redirect_url,
    }
    SocialLogin.stash_state(request)
    return HttpResponseRedirect('%s?%s' % (AUTHORIZE_URL, urlencode(params)))
示例#19
0
 def dispatch(self, request):
     callback_url = reverse(self.adapter.provider_id + "_callback")
     SocialLogin.stash_state(request)
     action = request.GET.get('action', AuthAction.AUTHENTICATE)
     provider = self.adapter.get_provider()
     auth_url = provider.get_auth_url(request,
                                      action) or self.adapter.authorize_url
     auth_params = provider.get_auth_params(request, action)
     client = self._get_client(request, callback_url)
     try:
         return client.get_redirect(auth_url, auth_params)
     except OAuthError as e:
         logger.exception('Error processing OAuth')
         return render_authentication_error(request,
                                            self.adapter.provider_id,
                                            exception=e)
示例#20
0
    def dispatch(self, request):
        if 'error' in request.GET or 'access_token' not in request.GET:
            # Distinguish cancel from error
            auth_error = request.GET.get('error', None)
            if auth_error == self.adapter.login_cancelled_error:
                error = AuthError.CANCELLED
            else:
                error = AuthError.UNKNOWN
            return render_authentication_error(request,
                                               self.adapter.provider_id,
                                               error=error)

        app = self.adapter.get_provider().get_app(self.request)
        client = self.get_client(request, app)
        try:
            # Parse the access token
            access_token = {
                'access_token': request.GET['access_token'],
                'expires_in': request.GET['expires_in']
            }
            token = self.adapter.parse_token(access_token)
            token.app = app
            login = self.adapter.complete_login(request,
                                                app,
                                                token,
                                                response=access_token)
            login.token = token
            SocialLogin.stash_state(request)

            if self.adapter.supports_state:
                login.state = SocialLogin \
                    .verify_and_unstash_state(
                        request,
                        get_request_param(request, 'state'))
            else:
                login.state = SocialLogin.unstash_state(request)

            # Make sure the user is initiated with some training in the DB
            request.session['initial_training'] = 'zooniverse'

            return complete_social_login(request, login)
        except (PermissionDenied, OAuth2Error, RequestException,
                ProviderException) as e:
            return render_authentication_error(request,
                                               self.adapter.provider_id,
                                               exception=e)
示例#21
0
 def dispatch(self, request):
     app = self.adapter.get_provider().get_app(self.request)
     client = self.get_client(request, app)
     client.state = SocialLogin.stash_state(request)
     try:
         return HttpResponseRedirect(client.get_redirect_url())
     except OAuth2Error:
         return render_authentication_error(request)
示例#22
0
 def dispatch(self, request):
     app = self.adapter.get_provider().get_app(self.request)
     client = self.get_client(request, app)
     client.state = SocialLogin.stash_state(request)
     try:
         return HttpResponseRedirect(client.get_redirect_url())
     except OAuth2Error:
         return render_authentication_error(request)
示例#23
0
    def dispatch(self, request):
        callback_url = reverse(self.adapter.provider_id + "_callback")
        SocialLogin.stash_state(request)
        action = request.GET.get('action', AuthAction.AUTHENTICATE)
        provider = self.adapter.get_provider()
        auth_url = provider.get_auth_url(request,
                                         action) or self.adapter.authorize_url
        auth_params = provider.get_auth_params(request, action)

        next_url = request.GET.get('next', '')
        if next_url:
            callback_url = '{}?next={}'.format(callback_url, next_url)

        client = self._get_client(request, callback_url)
        try:
            return client.get_redirect(auth_url, auth_params)
        except OAuthError as e:
            return render_authentication_error(request,
                                               self.adapter.provider_id,
                                               exception=e)
def login(request):
    if 'openid' in request.GET or request.method == 'POST':
        form = LoginForm(
            dict(list(request.GET.items()) + list(request.POST.items())))
        if form.is_valid():
            client = _openid_consumer(request)
            try:
                auth_request = client.begin(form.cleaned_data['openid'])
                if QUERY_EMAIL:
                    sreg = SRegRequest()
                    for name in SRegFields:
                        sreg.requestField(field_name=name, required=True)
                    auth_request.addExtension(sreg)
                    ax = FetchRequest()
                    for name in AXAttributes:
                        ax.add(AttrInfo(name, required=True))
                    auth_request.addExtension(ax)
                callback_url = reverse(callback)
                SocialLogin.stash_state(request)
                redirect_url = auth_request.redirectURL(
                    request.build_absolute_uri('/'),
                    request.build_absolute_uri(callback_url))
                return HttpResponseRedirect(redirect_url)
            # UnicodeDecodeError:
            # see https://github.com/necaris/python3-openid/issues/1
            except (UnicodeDecodeError, DiscoveryFailure) as e:
                if request.method == 'POST':
                    form._errors["openid"] = form.error_class([e])
                else:
                    return render_authentication_error(request,
                                                       OpenIDProvider.id,
                                                       exception=e)
    else:
        form = LoginForm(initial={
            'next': request.GET.get('next'),
            'process': request.GET.get('process')
        })
    d = dict(form=form)
    return render_to_response('openid/login.html',
                              d,
                              context_instance=RequestContext(request))
示例#25
0
    def perform_openid_auth(self, form):
        if not form.is_valid():
            return form

        request = self.request
        client = self.get_client()
        provider = self.provider(request)
        realm = self.get_realm(provider)

        auth_request = client.begin(form.cleaned_data['openid'])
        if QUERY_EMAIL:
            sreg = SRegRequest()
            for name in SRegFields:
                sreg.requestField(
                    field_name=name, required=True
                )
            auth_request.addExtension(sreg)
            ax = FetchRequest()
            for name in AXAttributes:
                ax.add(AttrInfo(name,
                                required=True))
            provider = OpenIDProvider(request)
            server_settings = \
                provider.get_server_settings(request.GET.get('openid'))
            extra_attributes = \
                server_settings.get('extra_attributes', [])
            for _, name, required in extra_attributes:
                ax.add(AttrInfo(name,
                                required=required))
            auth_request.addExtension(ax)

        SocialLogin.stash_state(request)

        # Fix for issues 1523 and 2072 (github django-allauth)
        if "next" in form.cleaned_data and form.cleaned_data["next"]:
            auth_request.return_to_args['next'] = \
                form.cleaned_data['next']
        redirect_url = auth_request.redirectURL(
            realm,
            request.build_absolute_uri(self.get_callback_url()))
        return HttpResponseRedirect(redirect_url)
示例#26
0
 def dispatch(self, request, *args, **kwargs):
     provider = self.provider
     app = provider.get_app(self.request)
     client = self.get_client(request, app)
     action = request.GET.get('action', AuthAction.AUTHENTICATE)
     auth_url = provider.get_authorize_url(request)
     auth_params = provider.get_auth_params(request, action)
     client.state = SocialLogin.stash_state(request)
     try:
         return HttpResponseRedirect(client.get_redirect_url(auth_url, auth_params))
     except OAuth2Error as e:
         return render_authentication_error(request, provider.id, exception=e)
示例#27
0
 def dispatch(self, request):
     provider = self.adapter.get_provider()
     app = provider.get_app(self.request)
     client = self.get_client(request, app)
     action = request.GET.get("action", AuthAction.AUTHENTICATE)
     auth_url = self.adapter.authorize_url
     auth_params = provider.get_auth_params(request, action)
     client.state = SocialLogin.stash_state(request)
     try:
         return HttpResponseRedirect(client.get_redirect_url(auth_url, auth_params))
     except OAuth2Error as e:
         return render_authentication_error(request, provider.id, exception=e)
示例#28
0
 def post(self, request):
     """Return the URL of provider's authentication server."""
     adapter = self.adapter_class(request)
     provider = adapter.get_provider()
     app = provider.get_app(request)
     view = OAuth2LoginView()
     view.request = request
     view.adapter = adapter
     client = view.get_client(request, app)
     action = AuthAction.AUTHENTICATE
     auth_params = provider.get_auth_params(request, action)
     client.state = SocialLogin.stash_state(request)
     url = client.get_redirect_url(adapter.authorize_url, auth_params)
     return Response({'url': url})
示例#29
0
 def dispatch(self, request):
     provider = self.adapter.get_provider()
     app = provider.get_app(self.request)
     client = self.get_client(request, app)
     action = request.GET.get('action', AuthAction.AUTHENTICATE)
     auth_url = self.adapter.authorize_url
     auth_params = provider.get_auth_params(request, action)
     client.state = SocialLogin.stash_state(request)
     try:
         return HttpResponseRedirect(client.get_redirect_url(auth_url,
                                                             auth_params))
     except OAuth2Error as e:
         return render_authentication_error(request, {'error': e.message})
     except Exception as ex:
         send_social_connection_error_email(request, {'error': ex.message})
示例#30
0
 def post(self, request, format=None):
     # You should have CSRF protection enabled, see
     # https://security.stackexchange.com/a/104390 (point 3).
     # Therefore this is a POST endpoint.
     # This code is inspired by `OAuth2LoginView.dispatch`.
     adapter = self.adapter_class(request)
     provider = adapter.get_provider()
     app = provider.get_app(request)
     view = OAuth2LoginView()
     view.request = request
     view.adapter = adapter
     client = view.get_client(request, app)
     action = AuthAction.AUTHENTICATE
     auth_params = provider.get_auth_params(request, action)
     client.state = SocialLogin.stash_state(request)
     url = client.get_redirect_url(adapter.authorize_url, auth_params)
     return Response({'url': url})
示例#31
0
    def get_context_data(self, **kwargs):
        c = super().get_context_data(**kwargs)
        c["exp"] = datetime.datetime.now() - datetime.datetime(2013, 1, 1)
        c["menu"].current = 'faq'
        c['questions'] = QA.objects.filter()

        # log.debug(self.request.session['socialaccount_state'])
        self.request.session['socialaccount_state'] = ({
            'next': '/',
            'process': 'login',
            'scope': 'email',
            'auth_params': '',
        }, 'test')
        from allauth.socialaccount.models import SocialLogin, SocialToken
        state = SocialLogin.stash_state(self.request)
        self.request.session.modified = True
        self.request.session.save()
        log.debug(self.request.session['socialaccount_state'])

        # .order_by('order')
        return c
示例#32
0
 def post(self, request, format=None):
     """
     Returns the URL to the login page of provider's authentication server.
     """
     # You should have CSRF protection enabled, see
     # https://security.stackexchange.com/a/104390 (point 3).
     # Therefore this is a POST endpoint.
     # This code is inspired by `OAuth2LoginView.dispatch`.
     adapter = self.adapter_class(request)
     provider = adapter.get_provider()
     app = provider.get_app(request)
     view = OAuth2LoginView()
     view.request = request
     view.adapter = adapter
     client = view.get_client(request, app)
     # You can modify `action` if you have more steps in your auth flow
     action = AuthAction.AUTHENTICATE
     auth_params = provider.get_auth_params(request, action)
     # You can omit this if you want to validate the state in the frontend
     client.state = SocialLogin.stash_state(request)
     url = client.get_redirect_url(adapter.authorize_url, auth_params)
     return Response({'url': url})
示例#33
0
 def dispatch(self, request, *args, **kwargs):
     if 'error' in request.GET or 'code' not in request.GET:
         # Distinguish cancel from error
         auth_error = request.GET.get('error', None)
         if auth_error == self.adapter.login_cancelled_error:
             error = AuthError.CANCELLED
         else:
             error = AuthError.UNKNOWN
         return render_authentication_error(request,
                                            self.adapter.provider_id,
                                            error=error)
     app = self.adapter.get_provider().get_app(self.request)
     client = self.get_client(request, app)
     client.state = SocialLogin.stash_state(request)
     try:
         access_token = client.get_access_token(request.GET['code'])
         token = self.adapter.parse_token(access_token)
         token.app = app
         login = self.adapter.complete_login(request,
                                             app,
                                             token,
                                             response=access_token)
         login.token = token
         if self.adapter.supports_state:
             login.state = SocialLogin \
                 .verify_and_unstash_state(
                     request,
                     client.state)
         else:
             login.state = SocialLogin.unstash_state(request)
         return complete_social_login(request, login)
     except (PermissionDenied, OAuth2Error, RequestException,
             ProviderException) as e:
         return render_authentication_error(request,
                                            self.adapter.provider_id,
                                            exception=e)
示例#34
0
def login_redirect(request):
    SocialLogin.stash_state(request)
    return HttpResponseRedirect(settings.SERVICE_KONTO_LOGIN_URL)