Kaito-a-bit / twitter_clone_app

This repository is for cloning twitter app⚡️
0 stars 0 forks source link

#1/user sign up #2

Closed Kaito-a-bit closed 2 years ago

Kaito-a-bit commented 2 years ago

○issue   #1

○実装方針

○実行画面

○質問・その他

Kaito-a-bit commented 2 years ago

○課題  ・ユーザ登録には成功したが、その後のリダイアレクトが成功しないことがある。   (まだバグかどうか判然としない部分がある)

○解決策  ・htmlの<form>を閉じていなかったので適切な形にすることで望ましい挙動をするようになった。

<成功時のログ>

スクリーンショット 2022-02-06 13 52 06
Kaito-a-bit commented 2 years ago

○現状 ・URLを打ち込めば、ログインしていなくてもホーム画面に行けてしまうようになっている

Akinori13 commented 2 years ago

gitignoreを後から反映する方法があるので、それを実施してください。 次のprでログイン・ログアウト機能を実装しますが、ご質問の点についてはこれ が参考になるかと思います。

Kaito-a-bit commented 2 years ago

gitignoreを後から反映する方法があるので、それを実施してください。

この記事を参考に.gitignoreファイルを編集し、キャッシュを削除しました。

Kaito-a-bit commented 2 years ago

○修正点 

Kaito-a-bit commented 2 years ago

○変更点

Kaito-a-bit commented 2 years ago
Kaito-a-bit commented 2 years ago

デフォルトでblank=FALSE, null=FALSEらしいので必須フィールドに対する指定を削除した

Kaito-a-bit commented 2 years ago

PRが大きくなってすみません😞🙇‍♂️

Kaito-a-bit commented 2 years ago

user = authenticate(username=email, password=password)で既に試行していたが、passwordの取得ができていなかった。

スクリーンショット 2022-03-08 16 04 49
Akinori13 commented 2 years ago

user = authenticate(username=email, password=password)で既に試行していたが、passwordの取得ができていなかった。

  • Userモデルに既にpasswordというカラムが存在しているが、password = form.cleaned_data.get('passsword')で取得できていない
  • Cleaned_dataはフォームの中でバリデーションを通過したデータが格納されていく。バリデーション自体は通過しているはずなのに取得できない理由がわからないです。
スクリーンショット 2022-03-08 16 04 49

UserCreationFormは、password1とpassword2というフォームアイテムを持ちます。このpassword1とpassword2のバリデーションチェックが完了した後に、password1がハッシュ化されてUserモデルのpasswordに格納されます。 したがってユーザーが入力した内容を確認する時は、password1を取得します。

form.cleaned_data.get('password1')
Kaito-a-bit commented 2 years ago
Kaito-a-bit commented 2 years ago

テスト作成の参考記事

Kaito-a-bit commented 2 years ago
Kaito-a-bit commented 2 years ago

○リダイレクト先のテスト リダイレクト先の検証については下記のサイトを参考に作成した。

def test_redirect_to_home(self):
    data = {
      'username': 'Gym Motivation3',
      'email': 'nanaMotive@gmail.com',
      'birthday': '2002-1-1',
      'password1': 'kjhd1245',
      'password2': 'kjhd1245',
    }
    self.response = self.client.post('/signup/', data)
    self.assertRedirects(self.response, '/home/', status_code=302, target_status_code=200, msg_prefix='', fetch_redirect_response=True)

上記のテストの実行結果は以下の通りとなった。 以下の結果を302が返ってくるはずだけど200が返ってきた。という趣旨のエラーだと解釈した。

スクリーンショット 2022-03-15 11 44 47

ここでshellで同様の処理を実行してみることにした。 shell内ではpostした結果返ってきたのは302だった。 (あるページに遷移したことを示すコード)

スクリーンショット 2022-03-15 11 56 09
fumiharun11 commented 2 years ago

サインアップ処理自体に失敗しているため生じているエラーです。 以下のコメント箇所が原因と考えられます。

def test_redirect_to_home(self):
    data = {
      'username': 'Gym Motivation3', # 半角スペースがある
      'email': 'nanaMotive@gmail.com',
      'birthday': '2002-1-1',
      'password1': 'kjhd1245',
      'password2': 'kjhd1245',
    }
    self.response = self.client.post('/signup/', data)
    self.assertRedirects(self.response, '/home/', status_code=302, target_status_code=200, msg_prefix='', fetch_redirect_response=True)