2017-11-15 11 views
0

ユーザーがログインしていなくても、ある種類のWebサイトには認証の種類があります。plunkerを例にとると、ログインしていないユーザーでも他のユーザーが変更できないようにスニペットできます。ユーザーが別のブラウザタブでリンクを開いても、スニペットはいつでも変更できます。一部のWebサイトでは非表示の認証

私の現在の解決策は、ユーザーモデルにtypeフィールド(つまり、anonymnormal)を追加しています。その後、通常のユーザーがログインしなくなるたびに、ユニークなランダムIDを体系的に生成し、登録し、anonymユーザーとしてログインします。それは動作しますが、欠点は多くの私のデータベースにanonymユーザーがあります。

誰かがより良い解決策を持っていますか?この種の隠し認証を実現するための「標準的な」方法はありますか?

答えて

2

あなたが探している方法はセッションIDと呼ばれると思います。匿名ユーザーとして保存すると、WebアプリケーションはセッションIDを持つセッションを作成します。このセッションIDは、リンクでユーザーを識別するために使用されます。たとえば、plnkrの場合、https://plnkr.co/edit/session_id?p=catalogueのようになります。ここで、session_idはある種のハッシュです。

スニペットをフリーズするには、セッションIDがフラグ付きのクッキーに書き込まれます。たとえば、状態が固定されているとします。 Chromeでフリーズして、Chromeのプライベートウィンドウまたは同じコンピュータのFirefoxで開いた場合は、フリーズ解除できません。クッキーを持たない他のユーザーと同じように動作します。実際には、任意のユーザー識別ではなく、クッキーのセッションハッシュを使用してbetter for security reasonsです。

このアプローチは、匿名ユーザーを作成するよりも優れているわけではありません。セッションレコードをデータベースに保存してリンクごとにセッションコンテキストを開くことができます。実際、多くのユースケースやコードの場所にユーザがいると仮定した場合、あなたが行ったことを正確に行うことが、あなたのケースではもっと簡単になるかもしれません。

しかし、多くの場合、ユーザーからのセッションの分離は、ログインまたは登録後にセッション状態を維持するのを簡素化するので、非常に意味があります。登録した後、いくつかのWebストアがあなたのバスケットを空にしてしまうと、特にあなたが今再び見つけて戻さなければならないいくつかの小さなアイテムを入れると、かなりの欲求不満が生じます。それらはセッションを持っていないか、登録やログイン時にセッションを正しく使用しません。

そうしないと、私はこれを書いているように、ほとんど同じで、ユースケースに応じて、ある種の賢明な保持ポリシーがない限り、データベースを汚染する多くの匿名セッションに対処する必要があります。例えば、plnkr.coに似たWebサイトで、コードスニペットを共有し、stackoverflowなどのサイトに投稿すると、少なくとも1年に1回以上アクセスするユーザーがいる間、それらのセッションをよりよく保持する必要があります。したがって、セッションにはアクセス日があり、ポリシーは1年以上経過しているはずです。

希望します。

+0

を含むいくつかの情報は、あなたはまだ持っている」...あなたの答えをありがとう、私は後でそれらを変更することを選択した場合の機能でそれらを包んセッションレコードをデータベースに保存してリンク別にセッションコンテキストを開くことができます "==>"リンク別セッションコンテキストを開く "とはどういう意味ですか?私はなぜセッションレコードをデータベースに保存する必要があるのか​​理解できません。 – SoftTimur

+0

@SoftTimurは、コンテキストが本当にシンプルで軽量で、機密ユーザーデータを含んでいませんが、最も重要なのはコンテキストがユーザーのローカルブラウザでは、厳密に言えば、あなたはする必要はありません(Jamesが与えた答えを見てください)。しかし、plnkrの例では、ユーザがセッションを保存して他の人にリンクを送信し、他の人が同じコード(この場合コンテキスト)を見ることができるため、コンテキストはユーザのブラウザにとってローカルではありません。 URLにエンコードするには大きすぎますので、サーバーのどこかに保存されます。ほとんどの場合、データベースに保存されます。 –

+0

プランナーのような遊び場では、コードをデータベースに保存するのは不可能ですが、匿名のユーザー情報は保存できません。匿名のユーザー情報だけがセッションIDを持つセッションに添付されることは不可能ですか? – SoftTimur

0

ローカルストレージを使用して同様の処理を行っています。これにより、ブラウザにデータを保存することができます。その後、ユーザーはタブを開いてブラウザを完全に閉じて再び開くことができ、データはまだそこにあります。それは彼らのために保存されているように見えますが、実際にはブラウザに保存されています。

これは、他の人が自分が行ったことを見ることができないため、これがあなたの後ろにあるかどうかは分かりません。

私はこのような何か

StoreLocalVariable: function (key, value) { 
     localStorage.setItem(key, value); 
}, 

GetLocalVariable: function (key) { 
     return localStorage.getItem(key); 
}, 

互換性 https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API

関連する問題