Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

他のユーザーのメール通知設定を変更できないようにした #8149

Merged
merged 6 commits into from
Nov 15, 2024

Conversation

Ryooo-k
Copy link
Contributor

@Ryooo-k Ryooo-k commented Oct 23, 2024

Issue

概要

自分以外のユーザーのメール通知をOFFに設定できないようにしました。

変更前

  • HTMLでユーザーIDを改変すると、自分以外のユーザーのメール通知をOFFに設定することができる

変更後

  • URIのuser_IDとtokenが不整合の場合、アクセスできずメール通知をOFFにできない。

変更確認方法

  1. bug/prevent-disabling-other-users-notifications をローカルに取り込む
    i. git fetch origin pull/8149/head:bug/prevent-disabling-other-users-notifications
    ii. git checkout bug/prevent-disabling-other-users-notifications
  2. foreman start -f Procfile.dev でローカルサーバーを立ち上げる
  3. 通知設定変更画面にアクセスする(kimuraさんの通知設定変更の画面)
  4. デベロッパーツールを開く(Mac:opt + cmd + i 、Windows:Ctrl + Shift + i )
  5. セレクトモードに切り替える。(下図の赤丸部分を選択する)

スクリーンショット 2024-10-24 9 17 42

  1. 「オフにする」のボタンを押す

スクリーンショット 2024-10-24 9 45 39

  1. デベロッパーツール上のHTMLで、下図赤枠部が選択されるため、下記手順でtokenを変更する
    i. "/users/991528156/mail_notification?token=k6Da-oL3cRi8ApNFO9-Gcg"にカーソルを当て、右クリック
    ii. Edit attributeを選択
    iii. "/users/991528156/mail_notification?token=k6Da-oL3cRi8ApNFO9-Gcg""/users/991528156/mail_notification?token=037i-ef5n7V4EnPv74mtyQ"に変更する
    k6Da-oL3cRi8ApNFO9-Gcgはkimuraさんのtoken、037i-ef5n7V4EnPv74mtyQはkomagataさんのtoken)

スクリーンショット 2024-11-07 15 26 10

8.「オフにする」のボタンを押す

スクリーンショット 2024-11-07 15 26 10 2

  1. 「ユーザーIDもしくはTOKENが違います。」のメッセージが表示されることを確認する。
  • ログイン済みの場合の画面

スクリーンショット 2024-11-07 15 29 13

  • 未ログインの場合の画面

スクリーンショット 2024-11-07 15 32 07

  1. ユーザー名 kimura 、パスワード testtestログインする
  2. kimuraさんの登録情報変更ページにアクセスし、メール通知がONになっていることを確認する
スクリーンショット 2024-10-24 10 27 19
  1. ログアウトする
  2. ユーザー名 komagata 、パスワード testtestログインする
  3. komagataさんの登録情報変更ページにアクセスし、メール通知がONになっていることを確認する

Screenshot

変更前

全てのユーザーIDを受け入れ、他のユーザーのメール通知をOFFにできる。

スクリーンショット 2024-10-24 10 55 01

変更後

  • URIのユーザーIDとtokenの整合が取れている場合、アクセスできメール通知をOFFにできる。
スクリーンショット 2024-10-24 10 55 01
  • URIのユーザーIDとtokenが不整合の場合、アクセスできずメール通知をOFFにできない。

スクリーンショット 2024-11-07 15 29 13

@Ryooo-k Ryooo-k marked this pull request as ready for review October 24, 2024 02:16
@Ryooo-k Ryooo-k changed the title Bug/prevent disabling other users notifications 他のユーザーのメール通知設定を変更できないようにした Oct 24, 2024
@Ryooo-k Ryooo-k self-assigned this Oct 24, 2024
@Ryooo-k
Copy link
Contributor Author

Ryooo-k commented Oct 24, 2024

@Shrimprin
お疲れ様です!
こちらのレビューをお願いしたいのですが可能でしょうか?
ご確認お願いいたします🙏

@Shrimprin
Copy link
Contributor

@Ryooo-k
お疲れ様です!レビュー承知いたしました 👍
今週の土日あたりで対応させていただきます〜

@Shrimprin
Copy link
Contributor

@Ryooo-k
お疲れ様です!

動作については問題ないこと確認できました! 👍

1点、仕様について質問です。
メール通知をOFFにする画面はメール通知をOFFにする対象のユーザー以外からはアクセスされる必要がないという認識です。
なので、画面へのアクセスにログイン必須かつログインユーザーがメール通知をOFFにする対象のユーザーと一致の条件を加えても良いと思ったのですがいかがでしょうか?

@Ryooo-k
Copy link
Contributor Author

Ryooo-k commented Oct 28, 2024

@Shrimprin
ご確認ありがとうございます!

画面へのアクセスにログイン必須かつログインユーザーがメール通知をOFFにする対象のユーザーと一致の条件を加えても良いと思ったのですがいかがでしょうか?

確かにメール通知OFF画面に対して直接アクセス制限をかけた方が良いかもしれないですね!
(アクセス制限かけたら現状の条件分岐は一つ減らせそうですし)
ログインユーザーがメール通知をOFFにする対象のユーザーと一致の条件は、結局メール通知OFF画面でHTMLを改変すれば今回のバグと同じ現象になってしまうと思うので、まずはアクセス制限をかけるように変更してみますね👍

@Ryooo-k
Copy link
Contributor Author

Ryooo-k commented Oct 29, 2024

@Shrimprin
お疲れ様です!
メール通知OFF画面へのアクセスにはログインを必要要件としました。再度、レビューお願いいたします🙏

Copy link
Contributor

@Shrimprin Shrimprin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Ryooo-k
お疲れ様です!
2点コメントしましたのでご確認お願いします 🙏

@@ -1,7 +1,6 @@
# frozen_string_literal: true

class Users::MailNotificationController < ApplicationController
skip_before_action :require_active_user_login, raise: false
layout 'not_logged_in'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ログインを前提とした画面なので、非ログイン時のレイアウトを使う必要はないかもしれません。
意図があって残しているようであればOKです!

Copy link
Contributor Author

@Ryooo-k Ryooo-k Oct 30, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

レイアウトが崩れるので'not_logged_in'は残しているんですが、ここ迷ったんですよね〜😕ファイル名変更は、他の複数ファイルで使用されており意味のある命名になっているようなので、ファイル名変更はやりたくはなく、かといってこのファイルのためだけに新しいファイルを作るのも違うかなーと思いました。
なので一旦、このままで進めます!

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

なるほどです!
ただ、ログインが必要なページにnot_logged_inというレイアウトを使用しているのは混乱を生むため避けた方がいいようにも思えます。
レイアウトが崩れてしまうということですが、CSSを修正して対応するのはいかがでしょうか?
デザインに関わる内容なので @machida さんに相談してみてもいいかと思います!

ご検討よろしくお願いいたします 🙏

@@ -3,10 +3,16 @@
require 'application_system_test_case'

class MailNotificationsTest < ApplicationSystemTestCase
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

他のユーザーの通知OFFを設定できないことのテストもあっていいと思います。
ログインユーザーとは別のユーザーのメール通知OFF画面にアクセスすることでテストできると思います。

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ご指摘ありがとうございます!追加します👍

@Ryooo-k
Copy link
Contributor Author

Ryooo-k commented Oct 30, 2024

@Shrimprin
修正しましたのでご確認お願いします!

Copy link
Contributor

@Shrimprin Shrimprin left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Ryooo-k
ご対応ありがとうございます!
追加でコメントさせていただきましたのでご確認よろしくお願いいたします 🙏

assert_text 'メール通知をオフにしますか?'
click_on 'オフにする'
assert_text 'メール配信を停止しました。'
end

test "update user's mail_notification settings without being logged in" do
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

テスト名はcan not update user's ... などとした方が内容を表していて分かりやすいと思います。

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

なるほど、can notを付けた方ができないことが強調されてわかりやすいですね。ありがとうございます。

assert_text 'ログインしてください'
end

test "update another user's mail_notification" do
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

another usersよりother usersの方が正確かもしれません。
また、こちらも同様にcan not update other user's ...などとした方が良いと思います。

@@ -1,7 +1,6 @@
# frozen_string_literal: true

class Users::MailNotificationController < ApplicationController
skip_before_action :require_active_user_login, raise: false
layout 'not_logged_in'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

なるほどです!
ただ、ログインが必要なページにnot_logged_inというレイアウトを使用しているのは混乱を生むため避けた方がいいようにも思えます。
レイアウトが崩れてしまうということですが、CSSを修正して対応するのはいかがでしょうか?
デザインに関わる内容なので @machida さんに相談してみてもいいかと思います!

ご検討よろしくお願いいたします 🙏

@Ryooo-k
Copy link
Contributor Author

Ryooo-k commented Oct 31, 2024

@Shrimprin
ご確認ありがとうございます!
レイアウトの部分は、一度machidaさんに相談してみます!

@Ryooo-k
Copy link
Contributor Author

Ryooo-k commented Nov 6, 2024

@machida
先日はお時間いただきありがとうございました!
内容の議事録と方針をまとめておきます。

相談内容

本issueのバグを修正するにあたり、メール通知画面へのアクセスにはログインを必須にしようとしている。layoutには layout 'not_logged_in' を採用しており、ログイン必須の条件とlayout 'not_logged_in'が相違している状態となった。

解決策1

layoutを変更する。この場合はmachidaさんにデザイン変更依頼をする必要がある。

解決策2

ログインを必須とする場合、ユーザビリティが悪くなる。ログインは必須とせず、解読や予測が難しいURIとした方が良い。フィヨルドトーーク!GitHub)を参考にすると良い。

方針

ログインは不要で進めます。
フィヨルドトーーク!ではiduuidで生成されるため、解読や予測が難しいURIとなっていました。
本アプリのidserialで生成されるため、クエリパラメータにSecureRandom.urlsafe_base64メソッドで生成されるUserモデルのカラムのunsubscribe_email_tokenを追加し、そのtokenを用いて判定しようと思います。

@Ryooo-k
Copy link
Contributor Author

Ryooo-k commented Nov 7, 2024

@Shrimprin
修正しましたのでご確認お願いいたします!
修正のポイントをまとます。

  • ログインは不要としました(→そのためlayoutは変更なし)
  • 予測不能なtokenからユーザー情報を取得
  • クエリパラメータのuser_idとtokenの整合性を確認し、不整合の場合は処理を実行しない

@Shrimprin
Copy link
Contributor

@Ryooo-k
承知しました!いろいろと仕様をご検討いただきありがとうございます 🙏
土日の間に確認させていただきます~ 👍

@Shrimprin
Copy link
Contributor

@Ryooo-k
確認しました!OKだと思います 👍

他のユーザーは知り得ないtokenを使い、メールを受け取った本人しか変更できなくしたのですね!
こういう方法もあるのだな〜勉強になりました 👏

@Ryooo-k
Copy link
Contributor Author

Ryooo-k commented Nov 11, 2024

@Shrimprin
ご確認ありがとうございます!
自分も勉強になりました!色々ご指摘ありがとうございました✨

@komagata
メンバーレビューが完了しましたので、メンターレビューをお願いいたします🙇

Copy link
Member

@komagata komagata left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

確認させて頂きました。OKです〜🙆‍♂️

@komagata komagata merged commit 71589d6 into main Nov 15, 2024
4 checks passed
@komagata komagata deleted the bug/prevent-disabling-other-users-notifications branch November 15, 2024 04:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants