2016-06-24 10 views
0

ヘッダーのユーザー名とパスワードを渡したボットがアクセスすると予想されるビューを作成しています。 (それは特定のGoogleフィードのボットです)。しかし、ユーザー名とパスワードにアクセスしてボットの資格情報を認証することはできません。 request.GET.get('username')request.GET.get('password')の両方とも、とrequest.POSTの両方が空のQueryDictsを返すため、Noneを返します。私は私の要求をテストするために基本認証でPostmanを使用しています。ここ はviews.pyから私のコードです:djangoリクエストヘッダーのユーザー名とパスワードにアクセスしません。

def authenticate_bot(request): 
    username = request.GET.get('username') 
    password = request.GET.get('password') 
    feed_bot = authenticate(username=username, password=password) 

    if feed_bot is not None: 
     # Confirmed as user credentials. 
     login(request, feed_bot) 

私は私の基本的な認証ヘッダーからユーザ名とパスワードを取得するにはどうすればよいですか?

答えて

1

を探していると思いますように聞こえるない正しい方向に私を指しているためにあなたnthallをありがとう - 鍵となったrequest.META辞書を見つけます。

私はプロセスを説明したリソースの多くを見つけることができなかったので、Authorizationヘッダーからデータを取得し、認証するためのDjangoプロセス全体を投稿します。

import base64 
from django.contrib.auth import authenticate 

def header_auth_view(request): 
    auth_header = request.META['HTTP_AUTHORIZATION'] 
    encoded_credentials = auth_header.split(' ')[1] # Removes "Basic " to isolate credentials 
    decoded_credentials = base64.b64decode(encoded_credentials).decode("utf-8").split(':') 
    username = decoded_credentials[0] 
    password = decoded_credentials[1] 
    feed_bot = authenticate(username=username, password=password) 
    # if the credentials are correct, then the feed_bot is not None, but is a User object. 

Djangoは大文字と接辞要求に渡された任意のヘッダに「HTTP_」接頭辞を、正しく指摘nthallとしては、request.METAを介してアクセスすることができます。

'Basic username:password'という形式のbase64でエンコードされた情報を隔離して、その領域にヘッダーを分割することで、ちょうど'username:password'になります。次に、base64を使ってデコードし、結果をデコードしてバイトのような文字列をutf-8文字列に変換します。その後、ユーザー名とパスワードを隔離するだけです。次に、認証プロセスを実行します。

1

request.GETでもrequest.POSTも要求ヘッダーを参照していません。あなたが探しているデータは、辞書request.METAにある可能性が最も高い - 詳細はHttpRequest docsにある。セットアップの詳細について確認ができますが、request.META['username']request.META['password']

関連する問題