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) custom_call_back_url = settings.SOCIAL_AUTH_CUSTOM_CALLBACK if custom_call_back_url: url = custom_call_back_url else: url = re.sub('api.', 'app.', url) url = re.sub('staging-api.', 'staging-app.', url) return Response({'url': url})
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})
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})