** Clicky-click for da GitHub project **
保存するユーザ名とパスワードを忘れて:OAuthのための
としては、次のような解決策を持っています。それは狂った話です! Facebook、Google、Twitterの資格情報でログインできるようにする。それは一般的なウェブサイトの80%です。
資格情報の認証と格納は、IMOの2つの異なるタスクです。たとえば、私はあなたがどこで認証されても気にしません。そして一度あなたはそのデータをどのように保存するか気にしません:)
私は個人的にはRavenDbに保存しますが、それは私です個人的な選択。
このように、これらの2つのタスクを分離しておくことは(IMO)重要です。
だから、
lets look at some codez ....
public ActionResult AuthenticateCallback(string providerKey)
{
// SNIP SNIP SNIP SNIP
var model = new AuthenticateCallbackViewModel();
try
{
// SNIP SNIP SNIP SNIP
// Complete the authentication process by retrieving the UserInformation from the provider.
model.AuthenticatedClient = _authenticationService.CheckCallback(providerKey, Request.Params, state.ToString());
// Create a new user account or update an existing account.
// Whatever you end up doing, this is the part u want to
// pass this data to your repository (eg. RavenDb, Sql Server, etc)
// I'll use RavenDb in this example...
// And yes .. this is a contrite example. U might want to check for
// existing email or id or whatever u need to do, etc.
var myUser = Mapper.Map(model.AuthenticatedClient);
session.Store(myUser);
session.SaveChanges();
// SNIP SNIP SNIP SNIP
}
catch (Exception exception)
{
model.Exception = exception;
}
return View(model);
}
だから私は何をやったかを見てみましょう。私は任意の冗長なもの(値のチェックなど)をちょうどこのSOの答えにノイズをカットしました。
まず、Authenticateコールバックを処理します。例えば。私はFacebookに行ったばかりだし、「そうだよ!あなたはあなたです...そして、私のウェブサイトに戻ってきて、私はそれを私に与えるように頼んだいくつかのデータを持っています。
次へ...私たちはFacebookからいくつかのデータを与えられていますが、これはRavenDbに入れたい形式ではないかもしれません。だから私は古い形式から新しい輝きのあるUser
クラスに変換します。これはあなたのDbに固執するものです。
3番目 - 私はこれをDbに保存します。 カスタムDBロジックを実行する場所です。
それだけです。
M O D U L A R I Z E T H A T S H I T
The.End。
私は言い訳をしてください。黙示録の前に数時間残っています。私は自分自身を準備しなければならない。
私はこれを正確に行いました。私の必要性は、認証するのではなく、ユーザーを特定することです。これはうまくいく。これで私のDBにユーザーが保存されたので、ASP.NETメンバーシップシステムと一緒に使用する必要があります。だから、私は[Authorize]と[AllowAnonymous]でアクションにフラグを立て、ASP.NETのURLなどの組み込み機能を返すことができます。それ、どうやったら出来るの?これで、次のようになります。http://www.codethinked.com/setting-up-authentication-in-aspnet-mvc – esbenr
@esbenr '[Authorize]'などの属性を使用するには**あなたは**いません(そして私は**、**)はASP.NET Membershipシステムを使用する必要はありません。 **どのような状況下でも、そのすべてを使用しないでください**(Googleは1000000の理由のために)。 '[Authorize]'などを利用するには、 'IPrincipal'と' IIdentity'(use、2x I's)に使用情報を格納するだけです。新しい 'GenericPrincipal'を作成し、それに新しいGenericIdentityを追加してください。より多くのコードのそれらのためのGoogle :) –
ありがとう、それは私がやったことを終えたthats。私はAuthチケット+クッキーを使用して静的USERプリンシパルを動作させました - それは魅力的なように動作します:-)この方法はインターネット上の多くの場所に記載されています。 BTW:カスタムIPrinciple実装とカスタムIIdentity implを作成しました。だから、私は自分のユーザコンテキストでもっと多くのプロパティが必要でした。お返事をありがとうございます。/esbenr – esbenr