web-dev-qa-db-ja.com

登録時にユーザーが既存の有効な資格情報を提供する場合、ユーザーを認証することは理にかなっていますか?

最近誰かがこの提案された動作を思いついたので、同じように機能するサービスの例を見つけることができませんでした。あまり好きではないのですが、正確な理由で指を出すことはできません。

それはこのように機能します。 dB単位のユーザーがいます。

ユーザーはexample.com/sign_upとサインアップ:

  • メール:「[email protected]
  • パスワード: "12345678"(パスワードの確認をお願いする場合があります)

この場合、私たちが今やっていることは、競合があることをユーザーに知らせることです。同じメールのアカウントがあります。

しかし、ユーザーは有効な資格情報を入力したので、ユーザーを認証することは理にかなっていますか?

編集:私の質問は議論された同じ状況 ここ をカバーするとは思わない。これらは、同じメールを持つ2人の異なるユーザーではなく、同じ資格情報(メールの両方)で登録している1人のユーザーです。昔。この場合に通常見られるのは、失敗した登録試行です。ここで提案されている動作は、認証に対して資格情報をチェックし、それらが機能する場合は、単にユーザーをログインさせることです。

先に述べたように、これを行ったことは一度もありませんし、自分でも好きではありません。回答のいくつかは、なぜそれが悪い考えであると思われるのかについて非常に有効な洞察を与えています。

54
raul2010

つまり、基本的には、新しいアカウントにサインアップし、既存の資格情報を入力して、これらの資格情報の所有者としてログインするユーザーが必要ですか?

私はこれをお勧めしません:

  1. サインアップした人が既存のアカウントの所有者ではない可能性は小さいかもしれませんが、それは可能です。
  2. サインアップとログインの違いは明らかです。
  3. ユーザーは、すでにアカウントを持っていることを忘れるかもしれません。その電子メールアドレスのアカウントが既に存在することを通知することは、単にログインすることよりも優れています。これは予期しない動作であり、非常に混乱します。
51
jazZRo

はい、ユーザーをログインします

既存のユーザーがサインアップページを表示する方法はいくつかあります。

  • ユーザーが誤って登録をクリックする
  • ユーザーが最近アカウントにサインアップし、ブラウザーのURLオートコンプリートによりユーザーがそのURLに戻る(最新)
  • ユーザーは以前にサインアップしたのを忘れて、再度サインアップしようとしています(多くのユーザーと同様に、すべてのサイトで同じパスワードを使用しています)
  • サイトのランディングページにサインアップフォームが含まれていて、ユーザーがフォームへの入力を開始する(またはブラウザーの資格情報のオートコンプリートがフォームに入力する)

    • たとえば、github.comのデフォルトのランディングページにはサインアップフォームがあり、メールとパスワードを入力する既存のユーザーはサインアップフォームからログインできます。

      github homme page

ほとんどのサイトと同様に、1つのメールで複数のアカウントを許可しない場合、ユーザーは有効なログイン認証情報を提供しているため、UX以外の理由(たとえば、セキュリティ上の懸念)がない限り、ユーザーはログインできます。

設計の観点から、これはinterpolating user intent ...と呼ばれ、ユーザーが実際にUXで何をしようとしているのかについて、情報に基づいた推測を行っています(この場合、ユーザーの最終的な目標を想定しています)サイトにアクセスすることであり、サインイン/サインアップはそのための手段にすぎません)。

ユーザーの意図を補間する例:

google search

42
tohster

番号。

ユーザーがサイトでの登録ステータスを知らない可能性があります。そして、新規登録を開始します。

このような場合、最善の解決策は、インライン検証によってログインする方法を提供することです。ユーザーがパスワードフィールドに到達する前に、電子メールがデータベースに存在するため、検証によりログイン方法が提案されます。ただし、確実ではないため、ログインまたはパスワードを取得するためのリンクを提供します。

イラスト:

enter image description here

35
pzv

私は他の答えに同意しません、そしてyesと言います、それは理にかなっているかもしれません(いくつかの警告があります)。

一部のサイトでは、ログイン/登録フォームを組み合わせたパターンの普及が進んでおり、登録フォーム全体がメールアドレスとパスワードにすぎず、実質的なプロフィールの質問はすべて、登録後のオプションのステップになります。このパターンは、新規ユーザーのサイトへのエントリーに対する障壁を劇的に下げます。

このパターンを適用する場合、ユーザーが資格情報を入力し、たまたま間違ったボタンをクリックした場合(パスワードが正しければ)、ユーザーをログインすることは理にかなっていると思います。私が見ることができる唯一の問題は、パスワードが一致しない場合に発生するため、エラーメッセージは、ユーザーが表面的に要求したアクション(つまり、ユーザーが「新規アカウントの登録」をクリックして別のパスワードを指定した場合の「無効なパスワード」ではなく、「メールアドレスにアカウントがすでに存在するため、そのアカウントを登録できませんでした」です。

私が座っているところからはかなり有益なプロセスのように見え、ユーザーが目標(サイトの制限された機能にアクセスする)を簡単に達成できるようにしますが、それはis通常とは異なるため、この機能をユーザーがテストすることでメリットが得られるでしょう。

最悪のシナリオでは、ハイブリッドアプローチをとることができます。従来のエラー画面を表示し(「あなたのメールアドレスのアカウントは既に存在します」)、「今すぐサインインしますか?」のようなリンクで拡張します。

30
Kit Grose

それはお勧めしません。サインアップ画面は、特定のメールがすでに登録されていることを訪問者に通知する必要があります。そのことをユーザーに通知すると、彼/彼女は一歩戻り、いつ、何をしたかを思い出します。これは、彼/彼女がこのサイトへの最後の訪問についてコンテキストを取得するのに役立ちます。

ウェブサイトはユーザーのメンタルモデルに準拠している必要があります。私は、すべてのユーザーが、自動的にユーザーをログインさせるこの積極的なステップを取るシステムを歓迎するとは思いません。これは、意図的ではない別のワークフローを作成するのにも役立ちます。

さらに、多くのサイトでは、ログインページでのログイン試行を制限しています。サインアップページを介したログインを許可すると、ブルートフォース攻撃を招き、サインアップページにも制限を課す必要があります。それはやりすぎです。

この電子メールアドレスが登録されていることをユーザーに親切に尋ねることを考えることができます。代わりにログインしますか?(その後、彼/彼女をログインページに連れて行きます)またはこの電子メールはすでに登録されていますが、パスワードを忘れましたか?

5
Sol

絶対にない

ログイン試行は、少なくとも数分間、数回の試行後にロックします(そうしないと、攻撃者は上位100個の可能性の高いパスワードを試すことに失敗する可能性があります)。ユーザーが数回の試行後に登録画面がロックされ、ログインしないことで、パスワードが間違っているという手掛かりを攻撃者に与えると、ユーザーは非常に混乱するでしょう。アカウント。

あなたができる最善のことは、ユーザー名がすでに登録されていることをユーザーに伝えることです。これは攻撃者に必要以上の情報を伝えますが、選択肢はありません。ユーザーエクスペリエンスを向上させるために、ユーザー名フィールドから離れるとすぐに(パスワードを入力する前に)、それがいいとユーザーに伝えることができます。

この質問をセキュリティの専門家に投稿することもお勧めします。ユーザーエクスペリエンスを向上させるために、どの程度のセキュリティを放棄しているのかを常に理解する必要があります。

3
Guy Schalnat

すべての資格情報が同一であっても、ログインしないでください。

すべての資格情報が同一であるためにログインするのは理にかなっているように思われますが、上記のように混乱を引き起こします。

ユーザー名/メールアドレスが既に使用されていることを通知するだけです。

ユーザーにログインしたい場合は、Cookieを使用しますか?

2
killstreet

番号

ユーザーを一意に識別するために、電子メールアドレス以外のもの(個別のユーザーIDなど)を使用したい場合でも、2人の異なるユーザーが同じ電子メールアドレスを持つことはできません。限目。

ユーザーが既に知っている電子メールアドレスで登録する場合は、「パスワードを忘れた」機能に誘導するか、別の電子メールアドレスを入力してもらうことができます。

2人のユーザーが同じ電子メールアドレスで登録できるようにすることには、適切な使用例はありませんがあります。

1
Bart Gijssens

いいえ、攻撃面を2倍にしたため

ユーザーに識別子の入力を要求します。識別子にすでに資格情報があるかどうかを原子的に確認します。その場合、3つの選択肢を提供します。

  1. ログインフォームに移動
  2. 忘れた資格情報フォームに移動
  3. 新しい識別子を再送信します

提案したのと同じ効果ですが、ログインの障壁は1か所にとどまります。 1か所にあるため、セキュリティを吟味するためのコードが少なくなります。

1
bishop

いいえ、ユーザーを認証するべきではありません。電子メールIDのアカウントが既に存在することをユーザーに通知する必要があります。また、ユーザーがログインセクションに移動してサインインできるようにすることもできます。必要に応じて、電子メールIDフィールドに事前入力することもできますが、ユーザーは、パスワードをもう一度入力して、ログインセクションから確認および入力する必要があります。

また、私は常に、2つのフィールド(メールとパスワード)のみで構成されるサインアップフォームという考えを嫌っていました。登録フォームのように見せるには、名前やユーザー名などの3つ以上のフィールドと、メールとパスワードを入力してください。私はこれをやっている会社をいくつか見ましたが(いくつかは大きな会社です)、私は何度もそこでつまずきました。したがって、それも計画している場合は、再検討する必要があります。

0
UXPAPA

はいといいえ。

メールにはすでにアカウントが関連付けられていることをユーザーに知らせる必要があります。その後、何も入力し直さなくてもログインに切り替えることができるはずです。 神のログイン これをうまく表示し、異なるアクション用の複数のボタンを持ちながら、電子メールとパスワードのフィールドのみを使用します。

ログインページのサインアップボタンを非表示にすることは、ユーザーの詳細がまだ保存されていない場合に表示され、その後サインアップするのが非常に簡単なアクションである限り、許容されます。

0