2016-06-30 1 views
0

詳細

は、私は(いいえ、私はDjangoの専用の認証を使用していない)、ユーザーのための私のカスタム認証プロセスを作ってきた、私はほとんどそれを終え、まだ懸念を持ちます当時最も重要な部分でした。ジャンゴ:追跡のための戦略とユーザーデータを表示

ので、これらは、認証プロセスの主要な部分です:

  1. ユーザー看板のウェブサイトへの蒸気の社会の認証を介しました。
  2. 私の認証システムは、データベースにユーザのデータが含まれているかどうかをチェックし、そうでなければすべての情報を持つ新しいユーザオブジェクトを作成します。
  3. システムは、値がTrueのキーloggedとしてクッキーを作成します。

loggedのCookieの値がTrueの場合、ウェブサイトにユーザーのデータが表示されるようにこれらの手順が開始されます。

戦略と質問

だから例として、私が見るようのは、stackoverflowのをみましょう:それはログインしています時にクッキーが有効化され、それは私が私のプロフィールの写真のショー、そして私のスコア。

私はその特定のユーザーであることをどのように知っていましたか?クッキー経由

私はクッキーを経由してユーザーデータを追跡している場合、私は彼らが変更する場合が超簡単なので、それは非常に悪い考えであろうことを知っています。 IPアドレス経由

は、その後、私は考えていないIPアドレス、それらを追跡するための第二の方法は、良いアイデアがあります:セッション経由

from .models import User, IPs 

from django.http import HttpResponseRedirect, HttpResponse 

import steamapi 

def index(request, self): 
    ip = request.META['HTTP_X_FORWARDED_FOR'] 
    for search in IPs.objects.all(): 
     if str(ip) in str(search): 
      break 
      user = ip.strip(ip) # model will contain ip address with username. e.g (user 127.0.0.1), so i strip the ip 
     else: 
      username = steamapi.user.SteamUser(self.steamid) # i get steamid from different function which is not important. 
      username = IPs(data=username + " " + ip) 
      username.save() 
    print request.COOKIES 
    if request.COOKIES.get('logged'): 
     return HttpResponse("User %s" + "is logged in" % username) 
    else: 
     response = HttpResponse("User is not logged in") 
     response.set_cookie('logged', True) 
     return response 

Djangoのセッション(クッキーを除く)は正確にはわかりませんが、私はdjangoのキャッシュされたセッションを使用すると良いでしょうか?もしそうなら、どのように?

注::最初のステップに適合するコードを探しているので、コード例が優れています。


最初の戦略は完全に悪い考えで、私は2番目のニシキヘビではなく、良い戦略ではないと思い、サードしかし、私は助けを必要とするものです。

一般質問:

ので、最善の戦略は、ウェブサイト上の特定のユーザーデータを表示するために何でしょうか?私はsimoverをstackoverflowのバーに言いました。そこに私のプロフィール画像とスコアが表示されます。

答えて

1

標準的な解決策は、sessionsを使用することです。 FWIWは、Djangoのcontrib.authアプリですべての問題が既に解決されており、既知のセキュリティ上の問題が大部分を占めていることに注意してください。

+0

この問題のセッションにはどのタイプが最適でしょうか?キャッシュされたセッションは作業を行いますか? – ShellRox

+0

最も簡単なのはdbバックエンドを使用することですが、バックエンドはこれを行います。 –

+0

それはいい考えですが、私のニーズを満たすためにはどうすればいいのでしょうか?私は主要な部品の例を見ることができますか? – ShellRox

2

独自の認証システムを作成することは、どのように動作するかの詳細をすべて知るうえで便利ですが、セキュリティ上の問題が生じないように注意する必要があります。 Djangoの認証フレームワークは10年ほど働いているので、正しいことをすることができます。

ブルーノの答えは正しいです:あなたはセッションを使うべきです。セッションは、ユーザーのコンピュータ上でランダムな値を持つCookieを設定することで動作します。その後、ブラウザは各リクエストでランダム値を返し、Django Sessionフレームワーク(ミドルウェア、IIRC)はランダムな文字列をSessionインスタンス(オブジェクトのようなdict)と照合し、リクエストインスタンスに配置します。

最新のDjangoバージョンを使用していて、何らかの理由でCookieのみを使用したい場合は、新しいCookie based sessionsをチェックアウトすることができます。内部的には、クッキーに署名します(ユーザーのコンピュータに保存されているにもかかわらず、誰もそれを改ざんすることはできません)。

+0

例えば、私がこのようなクッキーを設定した場合、 'response.set_cookie( 'username'、 'something')'、ユーザーはそれを変更できませんでしたか?私はシステムのセキュリティがそれほど難しいとは知らなかった。 – ShellRox

+0

@ShellRox DONTは神のためにクッキーにユーザ名を設定しました!もちろん、これはdjangoのクッキーベースのセッションを使用する方法ではありません(答えのリンクに従ってください)。はい、セキュリティは非常に複雑なトピックであり、正しく動作することは非常に難しいので、動作することがわかっているものに固執してください。 Tiagoによれば、 'contrib.auth'は10年以上前から多くの経験豊富なプログラマーによって維持され、強化されており、Djangoを最も安全なWebフレームワークの1つにしています。はい、コードは自分のものよりも "複雑です"が、おそらく理由を調べ始めるでしょう... –

関連する問題