Django-ログインビュー
ログイン
<ログインフロー>
1)ユーザーログイン→ユーザー名とパスワードの入力
2)ユーザーが入力したパスワードを暗号化した後、暗号化したユーザーパスワードとデータベースに保存したユーザーパスワードを比較する
3)一致した場合、ログインに成功
4)ログインに成功したら、アクセスtockenをクライアントに送信
5)ユーザログインに成功した後,次回はアクセスtokenを添付し,毎回ログインしないようにサーバに要求を送信する.
ログイン時にはメール、ニックネーム、phone numberを1つ入力するだけでログインできます.でも単純な
💡 コイン発行
フロントと通信するときは、メールを入力するだけでログインでき、コードを書くことができ、メールは同じ人のidをもたらすと思います.また、secret keyも他のファイルでsecret keyをdickshnery形式と宣言してインポートして使用するため、
secret keyは、トークンの発行を符号化する際に、そのトークンを再復号する際のsecret keyと同じでなければならない.
Review
.filter()
クエリー・セットとしてインポートします.
filter(name=「サポート」)<サポートという名前の子供だけをインポート...!>
nameはデータベースのカラム名です!!
=>データを取得するには、無条件クエリー(object)に変換する必要があります.
email = data.get('email')
キーがあればインポートし、キーがなければdefault値をインポートします(default値を無条件に入力->キーがなければdefault値をインポートします).
email = data['email']
キーパーソンemailのvalueが必要です
keyがない場合、eamil変数の値は正しくありません.(KEYERROR)
ログイン時、ニックネーム、email、phone numberのいずれかが入ってきたら、ログインする必要があります.
data.get(「email」)はデフォルト値でも構いませんが、data[「email」はemailというキーがない場合、値は入力されないためkeyerrorが発生します.
コイン枚
バックエンドの立場では,トークンはどのユーザ情報を送信すべきかを知るために必要である.
たとえば、バックエンドでは、どのユーザーがログインしているか分かりません.だからtokenを通じてどのプレイヤーにショッピングバスケットを見せて、私のページを見せるかを知ることができます.
フロントはリクエストごとにコインを送信します.(ログインが必要な場合)
フロントはコインをローカルメモリに入れます.
elseが少なめのチラシがダメな場合は、先に考えるともっと簡単です.
jwtを使用してトークンを発行する方法
フロントはユーザの情報をheadersに入れてrequestを送信する.
バックエンドは、最初にトークンを作成およびログインするときに一度だけ送信され、フロントは常にhttpのヘッダにトークンを追加してバックエンドを要求します.また、バックエンドは、タグに基づいてユーザが誰であるかを判断することができる.
これを認証するコードは、レコーダによって実現される.フロントとの通信時に使用するサーバアドレス
->0.0.0.0:8000 ipアドレス
->ipconfig getifiaddr en 0:自分のipアドレスを知る
=>フロントアドレスを教えるときは、というようにipアドレスと一緒に伝えるべきです.
フロントと通信する場合は、同じWiFiに接続する必要があります.
<ログインフロー>
1)ユーザーログイン→ユーザー名とパスワードの入力
2)ユーザーが入力したパスワードを暗号化した後、暗号化したユーザーパスワードとデータベースに保存したユーザーパスワードを比較する
3)一致した場合、ログインに成功
4)ログインに成功したら、アクセスtockenをクライアントに送信
5)ユーザログインに成功した後,次回はアクセスtokenを添付し,毎回ログインしないようにサーバに要求を送信する.
class LoginView(View):
def post(self, request):
try:
data = json.loads(request.body)
email = data.get('email')
nickname = data.get('nickname')
phone_number = data.get('phone_number')
if email or nickname or phone_number:
if not User.objects.filter(Q(email=email) | Q(nickname=nickname) | Q(phone_number=phone_number)).exists():
return JsonResponse({'MESSAGE': 'NOT FOUND'}, status=404)
passwords = User.objects.get(email=data['email']).password
if bcrypt.checkpw(data['password'].encode('utf-8'),passwords.encode('utf-8')):
access_token = jwt.encode({'id': User.objects.get(email=email).id}, SECRET['secret'], algorithm='HS256')
return JsonResponse({'MESSGAGE': access_token}, status=200)
else:
return JsonResponse({'MESSAGE': 'NOT FOUND'}, status=404)
except KeyError:
return JsonResponse({'MESSAGE': 'KEY_ERROR'}, status=400)
💡 ログインログイン時にはメール、ニックネーム、phone numberを1つ入力するだけでログインできます.でも単純な
if email = ''
という価格はいらない!そうすると、keyerrorの問題が出てきたので、苦労をたくさんしました.dict.get("key")を使えばいいと後で知りました.email = data.get('email')
nickname = data.get('nickname')
phone_number = data.get('phone_number')
このようにしてデータを受信すると、データがなければNoneに直接アクセスするのでkeyerrorエラーを解決することができる.💡 コイン発行
フロントと通信するときは、メールを入力するだけでログインでき、コードを書くことができ、メールは同じ人のidをもたらすと思います.また、secret keyも他のファイルでsecret keyをdickshnery形式と宣言してインポートして使用するため、
SECRET['secret']
で書き込みが行われた.secret keyは、トークンの発行を符号化する際に、そのトークンを再復号する際のsecret keyと同じでなければならない.
Review
.filter()
クエリー・セットとしてインポートします.
filter(name=「サポート」)<サポートという名前の子供だけをインポート...!>
nameはデータベースのカラム名です!!
=>データを取得するには、無条件クエリー(object)に変換する必要があります.
email = data.get('email')
キーがあればインポートし、キーがなければdefault値をインポートします(default値を無条件に入力->キーがなければdefault値をインポートします).
email = data['email']
キーパーソンemailのvalueが必要です
keyがない場合、eamil変数の値は正しくありません.(KEYERROR)
ログイン時、ニックネーム、email、phone numberのいずれかが入ってきたら、ログインする必要があります.
data.get(「email」)はデフォルト値でも構いませんが、data[「email」はemailというキーがない場合、値は入力されないためkeyerrorが発生します.
コイン枚
バックエンドの立場では,トークンはどのユーザ情報を送信すべきかを知るために必要である.
たとえば、バックエンドでは、どのユーザーがログインしているか分かりません.だからtokenを通じてどのプレイヤーにショッピングバスケットを見せて、私のページを見せるかを知ることができます.
フロントはリクエストごとにコインを送信します.(ログインが必要な場合)
フロントはコインをローカルメモリに入れます.
elseが少なめのチラシがダメな場合は、先に考えるともっと簡単です.
jwtを使用してトークンを発行する方法
import jwt #패키지명은 pyjwt이지만 임포트할때의 이름은 jwt입니다.
SECRET = 'secret' #'랜덤한 조합의 키' 예제이므로 단순하게 'secret'이라고 하겠습니다.
token = jwt.encode({'id': User.objects.get(email=email).id}, SECRET, algorithm='HS256')
print(access_token)
'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MX0.-xXA0iKB4mVNvWLYFtt2xNiYkFpObF54J9lj2RwduAI'
header = jwt.decode(access_token, SECRET, algorithm = 'HS256')
print(header)
{'id': 1}
ユーザは、バックエンドに読み込まれたタイトル値で識別できます.フロントはユーザの情報をheadersに入れてrequestを送信する.
バックエンドは、最初にトークンを作成およびログインするときに一度だけ送信され、フロントは常にhttpのヘッダにトークンを追加してバックエンドを要求します.また、バックエンドは、タグに基づいてユーザが誰であるかを判断することができる.
これを認証するコードは、レコーダによって実現される.
->0.0.0.0:8000 ipアドレス
->ipconfig getifiaddr en 0:自分のipアドレスを知る
=>フロントアドレスを教えるときは、
フロントと通信する場合は、同じWiFiに接続する必要があります.
Reference
この問題について(Django-ログインビュー), 我々は、より多くの情報をここで見つけました https://velog.io/@jxxwon/Django-로그인-Viewテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol