def _wrapper(request, *args, **kwargs): # user is logged in if request.user.is_authenticated: return _view(request, *args, **kwargs) # multi user mode, log user in using oauth else: flow = CredentialsFlowWrapper(settings.UI_CLIENT, redirect_uri=settings.CONST_URL + '/oauth_callback/') auth_url, _ = flow.authorization_url( prompt='', access_type='offline', include_granted_scopes='true') request.session['code_verifier'] = flow.code_verifier return HttpResponseRedirect(auth_url)
def oauth_callback(request): # get the credentials from the Google redirect flow = CredentialsFlowWrapper(settings.UI_CLIENT, redirect_uri=settings.CONST_URL + '/oauth_callback/') flow.code_verifier = request.session.get('code_verifier') flow.fetch_token(code=request.GET['code']) # get or create the account account = Account.objects.get_or_create_user(flow.credentials) # log the account in ( set cookie ) django_login(request, account, backend=settings.AUTHENTICATION_BACKENDS[0]) messages.success(request, 'Welcome To StarThinker') return HttpResponseRedirect('/')
def oauth_callback(request): # get the credentials from the Google redirect flow = CredentialsFlowWrapper(settings.UI_CLIENT, redirect_uri=settings.CONST_URL + '/oauth_callback/') flow.code_verifier = request.session.get('code_verifier') flow.fetch_token(code=request.GET['code']) # pull user information for account lookup or creation service = discovery.build('oauth2', 'v2', credentials=flow.credentials) profile = service.userinfo().get().execute() # get or create the account account = Account.objects.get_or_create_user(profile, flow.credentials) #authenticate(username = username, password = password) # log the account in ( set cookie ) django_login(request, account, backend=settings.AUTHENTICATION_BACKENDS[0]) messages.success(request, 'Welcome To StarThinker') return HttpResponseRedirect('/')
def _wrapper(request, *args, **kwargs): # user is logged in if request.user.is_authenticated: return _view(request, *args, **kwargs) # multi user mode, log user in using oauth elif settings.UI_CLIENT: flow = CredentialsFlowWrapper(settings.UI_CLIENT, redirect_uri=settings.CONST_URL + '/oauth_callback/') auth_url, _ = flow.authorization_url( prompt='consent', #approval_prompt='auto', access_type='offline', include_granted_scopes='true') request.session['code_verifier'] = flow.code_verifier return HttpResponseRedirect(auth_url) # single user mode, no oath, use native django user management ( intead of gsuite ) else: return HttpResponseRedirect('/login/')
def get_client_type(credentials): client_json = CredentialsFlowWrapper(credentials, credentials_only=True) return next(iter(client_json.keys()))