2016-07-27 12 views
0

私はAPIを実行しており、トークンを使用しようとしています。私は達成したい: 1、クライアントは、ヘッダーのトークンを持つサーバーに要求を発行します。 2、サーバーはトークンを確認して何かをします(1回限り)。django:カスタマイズされたトークン認証

DRFを見ると、authenticate関数を上書きしたい場合は、Userオブジェクトまたは独自のカスタマイズされたUserオブジェクトも返す必要があります。すべてのプロセスにはユーザー、トークン、権限を必要としないため、Userオブジェクトを返すのは嫌です。これを行う方法?

おかげで、すべての

答えて

1

まずはまた、あなたがtoken_requiredデコレータを作成する必要があり、models.pyでモデルトークンを作成します。ユーザーのログイントークンが作成され、ログアウトトークンが破棄されるたびに

ログイン:

def login(request): 
    username=request.payload.get('username') 
    password=request.payload.get('password') 
    user,err=Auth.authenticate(username,password) 
    if err: 
     raise Exception() 
    token=Token.generate() 
    #you can return user 
    return {'token':token} 

デコレータ:

def token_required(func): 
    def inner(request, *args, **kwargs) 
    try: 
     request.token=Token.objects.get(token=token) 
     return func(request, *args, **kwargs) 
    except Token.DoesNotExists: 
     pass 
    return inner 

ログアウト:

@token_required 
def logout(request): 
    if request.method=='POST': 
     request.token.delete() 
     return {'status':'ok'} 
+0

その優れたソリューション。しかし、いくつかの微調整は、それを動作させるために行われなければならない –

関連する問題