2012-01-08 17 views
3

this answerとdjangoセッションhereを使ってみました。ミドルウェアを使用したカスタム認証バックエンド

私のカスタム認証でのログインはうまくいきますが、ミドルウェアを使用するたびにトークンを検証したいので、トークンを保存する方法を理解できないため、ミドルウェアからもアクセスできますビューとして。

私の認証バックエンドからセッション変数を格納しようとしましたが、自分のビューからアクセスしようとすると、常にキーエラーが発生します。

これを行うには良い方法がありますか?

ありがとうございます!

class MyAuthBackend(object): 

    supports_inactive_user = False 
    supports_object_permissions = False 
    supports_anonymous_user = False 

    def authenticate(self, username=None, password=None): 
    # This makes a call to my API to varify login, then return token if valid. I need to make login_valid accessible to my middleware and views. 
     login_valid = auth.login(username,password) 
     if login_valid: 
      try: 
       user = User.objects.get(username=username) 
      except User.DoesNotExist: 
       user = User(username=username, password='never_used') 
       user.is_active = True 
       user.save() 
      return user 
     return None 

    def get_user(self, user_id): 
     try: 
      return User.objects.get(pk=user_id) 
     except User.DoesNotExist: 
      return None 





class MyAuthMiddleware(object): 
    def process_request(self, request): 
     if not request.user.is_anonymous(): 
    # API call to my backend to check if token is still valid. If not, return to login page. 
      token_variable = ??????????? 
      if isTokenStillValid(token_variable): 
       return 
      else: 
      return HttpResponseRedirect('/accounts/login/?next=%s' % request.path) 

答えて

0

ログインにデフォルトのdjango.contrib.authログインビューを使用していますか?ログイン処理中にセッションを完全に消去したように見えます(認証バックエンドが呼び出された後、contrib.auth.login関数で、hereと記載されています)。

認証トークンを保存する代わりのログイン機能を使用して独自のログインビューを作成するか、トークンを別の場所(データベーステーブル、キャッシュシステム)に保存するかのいずれかが考えられます。後者は、1人のユーザーに対して複数の同時ログインを許可するのが難しくなる可能性があります。

関連する問題