パスワヌドなしでサむトに入るこずに぀いおの思考蚘事

ナヌザヌがGoogle / Twitter / Facebookなどを介しおログむンできるようにする必芁性に関する蚘事がHabréで1回たたは2回以䞊公開されおいたす。 実際のずころ、進歩的な人類は、ナヌザヌにナヌザヌ名ずパスワヌドを求めるこずは昚日だず長い間決めおきたした。 この蚘事では、新しい問題ずその解決方法に぀いお説明したす。



簡単な玹介



珟時点では、私は、 Kohana phpフレヌムワヌクのコミュニティの゜ヌシャルネットワヌクの芁玠を䜿甚しお、䞀皮の情報ポヌタルず参照ポヌタルを䜜成するこずを決定した愛奜家チヌムの開発者の1人です。 コメント/レビュヌを曞いたり、投祚や評䟡に参加したりするには、認蚌が必芁です。 OpenID / OAuthを䜿甚しお入力を固定するのは簡単です。考え始めるず興味深いものが衚瀺されたす。次は䜕ですか



原則ずしお、理論的研究に焊点を圓おるこずを事前に譊告する䟡倀がありたす。 説明したメカニズムの準備ができ次第、これは恥ずかしいこずではありたせんが、すぐに瀺したす。



認蚌



デヌタベヌス


サンプルデヌタベヌステヌブルの抂芁を説明したす。これにより、ナヌザヌから取埗できる情報の最倧量を保存できたす。



ナヌザヌ



ここではすべおが明確です。これはナヌザヌを保存するためのメむンテヌブルです。







auth_data



このテヌブルは、倖郚ナヌザヌアカりントを操䜜するためのものです。 たずえば、ナヌザヌAがGoogleずTwitterに1぀のアカりントを持っおいる堎合、1぀のナヌザヌ゚ントリのauth_dataに2぀を提䟛する必芁がありたす。







コミュニケヌションズ



圓然、アカりントは特定のナヌザヌにリンクする必芁があるため、 user_id倖郚キヌがauth_dataテヌブルに衚瀺されたす。



奇劙なこずに、ナヌザヌをアカりントにバむンドするために、 ナヌザヌテヌブルにauth_id



倖郚キヌも远加したす。 なんで したがっお、特定のプラむマリアカりントを匷調衚瀺したす。 たずえば、䞀郚のデヌタを自動的にナヌザヌプロファむルに転送したり、自動ログむンを実装したりしたす。 決定は議論の䜙地があるように芋えるかもしれたせんが、珟時点では合理的か぀有甚であるず考えおいたす。



悪魔、入れおくれ


そしお今-認蚌メカニズム自䜓。 手順。



  1. 「Enter through」ボタンをクリックするか、OpenIDを入力するか、単にプロバむダヌの写真をクリックしたした。 あなたがあなたであるこずをプロバむダヌに確認/蚌明したした。
  2. プロバむダヌからサむトに返送された埌、デヌタベヌスでこのナヌザヌの可甚性を確認する必芁がありたす。 すでに入っおいる堎合はどうしたすか これを行うには、䞊蚘の組み合わせservice_id



    + service_name



    䜿甚しservice_name



    。 アカりントが芋぀かった堎合、すべおが簡単ですuser_id



    でナヌザヌを抜出し、実行しuser_id



    。
  3. ただし、以前はアカりントがサむトの範囲に含たれおいなかったため、気が倉わる前にすばやく登録しおみたしょう。



    auth_dataには 、プロバむダヌが提䟛したすべおを入力したす。 このデヌタに基づいお、 username



    を生成しようずしusername



    たす。 新しいナヌザヌを保存し、 プラむマリずしお䜿甚するアカりントを指定したす。 ほら、新しいナヌザヌがいたす


さお、議論するものは䜕ですか



ルヌチンに぀いお簡単に説明したので、プログラマヌの远加の努力が必芁なさたざたなケヌスを芋おみたしょう。



私を芚えお


倚くの堎合、以前にどのアカりントでサむトにアクセスしたかを芚えるのが難しくなりたす。 そしお、なぜ、圌はそれをもっず必芁ずしおいるのかを芚えおおいおください。 したがっお、ログむンに成功した埌、ナヌザヌが次回自動的にログむンできるように、トヌクン付きのCookieをスロヌしたす。



これは安党ではない、ずあなたは蚀い、あなたはおそらく正しいでしょう。 したがっお、トヌクンを生成するずきに、クラむアントに関するさたざたな情報IP、ナヌザヌ゚ヌゞェントなど-遞択肢がありたすも保存したす。 ナヌザヌが「exit」ボタンを䜿甚しお明瀺的にサむトを離れるず、Cookieが削陀されたす。 さお、自動ログむンでは、ナヌザヌが重芁なデヌタを倉曎する石鹞たたはログむンを倉曎する堎合に確認が必芁になりたす。 極端な堎合は、「私を芚えおいない」チェックボックスを描画できたす。



圓然、OAuthの堎合、APIサヌビスを䜿甚するにはアカりントにツむヌトを送信するなど䜜業トヌクンが必芁です。そのため、「蚘憶」をたったく䜿甚しないか、適切なタむミングでプロバむダヌに送信しお確認する必芁がありたす。



芚えおる いや 芚えお


ナヌザヌがログアりトしおアルバニアに長期間移䜏しなかった堎合でも、認蚌を手䌝う必芁がありたす。 ナヌザヌがログむンした瞬間に戻りたしょう。 䞊蚘で、特別なCookieに぀いお曞きたした。 圌女の1぀では十分ではないこずがわかりたした-2぀目を投げたす。 長い期間。 内郚には、入力したアカりントの識別子が保存されたす。



戻っおきた。 そしお、この長期にわたるクッキヌは私たちを助けたす。 それに基づいお、「Googleを䜿いたした、バディ」などのメッセヌゞをナヌザヌに衚瀺したす。 圓然、別のアカりントを垌望する堎合は、Cookieを新しいアカりントに倉曎したす。 結局、私たちはただのサむトであり、気にしたせん。



別のアカりントからサむンむンする


ええ、別のアカりントで、あなたは蚀いたす では、ナヌザヌを耇補したすか 結構です。 私たちはこれず戊わなければならず、そうするためにあらゆる努力をしたす。



たず、Cookieの寿呜を確認したす。 圌女はすべおがきれいではないこず、そしお朜圚的に私たちが2番目のアカりントを䜜成しおいるこずを教えおください。 したがっお、これが別のアカりントであるか、ただ存圚するかをナヌザヌに尋ねたす。 別の堎合は、Cookieやその他の情報を事前にクリヌニングした埌、マむレヌゞがれロの新しいレコヌドを䜜成したす。



しかし、ナヌザヌがこれがただ圌であるず䞻匵する堎合、䜕らかの理由で私たちのために異垞な方法で入力したい私たちはこれを芚えおいるauth_dataにすべおのものがありたす、あなたはチェックをする必芁がありたす。 オフハンドには、いく぀かのオプションがありたす-元のアカりントでログむンするこずを提案する぀たり、 プラむマリで -これを指定するもう1぀の理由です、たたはメヌルに確認コヌドを送信したすナヌザヌプロファむルで指定されおいる堎合。 正匏には、 primaryの䞋に゚ントリを必芁ずしない堎合がありたす。すでに確認されおいるものはどれでも十分です-ご垌望のずおり。



ナヌザヌが自分の暩利を確認できなかった堎合、新しく䜜成されたアカりントを削陀したす。嘘を぀くこずはありたせん。



メヌルを芋おください


実際、メヌルアドレスはナヌザヌ識別子ずしお安党に䜿甚できたす。 したがっお、Cookieが芋぀からなくおも、プロバむダヌが䜿い慣れたemail



を返した堎合でも、パスアカりントのマヌゞたたは新しいパスを遞択しお同じダむアログを提䟛したす。 ああ、それはすべおのアカりントが石鹞を䞎えるわけではないのは残念です...



あなたの手の䞭の旗


ナヌザヌがアカりントを混同するたで埅぀のはなぜですか 圌がただベビヌベッドを持っおいるこずを圌に指摘させおください。 プロファむルには プラむマリアカりントの䞋のみ「自分のアカりント」ず芋なせるアカりントを远加する機胜がありたす。 そしお、あなたは奇劙な質問で人を困らせる必芁はありたせん。



Githubに぀いお


Github が OAuth v2をサポヌトしおいるこずをご存知ですか そしお、圌はそうするこずができたす。 私たちのプロゞェクトにずっお、このサヌビスは特別です、あなたは最愛の人ず蚀うこずができたす。 ナヌザヌがGithub経由でログむンするずすぐに、远加のなめをすぐに開始したす。



  1. これに぀いおは話したせんでしたが、 usersテヌブルにはdeveloper_id



    フィヌルドも栌玍developer_id



    たす。 これは、 developersテヌブルこんにちは、Capにリンクするための鍵です。ここには、APIを通じおGithubから枡された開発者が栌玍されおいたす。 実際、 Kohana甚に開発されたモゞュヌルこれはプロゞェクトの䞻なタスクの1぀ですを収集するため、蚪問者の1人がいく぀かのモゞュヌルの䜜成者であるこずを知るこずは非垞に䟿利です。
  2. ナヌザヌから远加情報を収集する必芁はありたせん。 たた、ナヌザヌがプログラマヌである堎合、この情報はさらに圹立ちたすkhe-khe。 登録が成功した埌、Githubberに圌の著者のN個のモゞュヌルがあるこずを思い出させたす。圌はいく぀かのデヌタ互換性、バヌゞョン、説明などを線集できたす。 いやいや 自分で凊理できたす。 それでも、開発者に著者の新しいモゞュヌルの远加に関する通知をメヌルで送信したす通知をオフにするオプションも実行したす。




私は䜕に぀いお話しおいるのですか



圓然、倚くの萜ずし穎がありたす。 私は、サむト蚪問者の偎から、説明されたアルゎリズムず起こり埗る間違い/省略に぀いお事前に議論したいず思いたすこのスキヌムはどれほど䟿利ですか、提案がありたすか、たたはそのようなサむトでは垞に䜕かがあなたを悩たせおいたすか、そしお開発者の芳点から暪枠があるかもしれたせん。 実際、Habréに関する蚘事ぞのコメントには、蚘事自䜓よりもはるかに有甚な情報が含たれおいるこずがよくありたす。



All Articles