3

MVC 6(Asp.Net One Core)にWebアプリケーションがあり、クレームベースの認証を使用しています。ログイン方法では、私は、クレームを設定します。たとえば、ユーザーがユーザープロファイルでメールを変更した場合ASP.NET One Coreのクレーム値を更新する

var claims = new Claim[] 
{ 
    new Claim("Name", content.Name), 
    new Claim("Email", content.Email), 
    new Claim("RoleId", content.RoleId.ToString()), 
}; 

var ci = new ClaimsIdentity(claims, "password"); 
await HttpContext.Authentication.SignInAsync("Cookies", new ClaimsPrincipal(ci)); 

は今、どのように私は、「電子メール」クレームのための電子メールの値を変更できますか?私は、Cookieを更新するSignOutAsyncとSignInAsyncをもう一度する必要がありますか?最良の解決策は、古典的なセッションにこれを保存することです?より良い解決策がありますか?私は全く間違っていますか?

提案がありますか?

答えて

3

のCookieを更新するにはSignOutAsyncとSignInAsyncを再度実行する必要がありますか?

回答ははいです。

最も簡単な方法は、手動でログアウトして(クレームを再度作成する)のメールを更新する方法と同じ方法です。

最高の解決策は、これを古典的なセッションに保存することです。

私はそうしないことをお勧めします。セッション状態を明示的に使用することは、ASP.Net MVCの悪い習慣です。

+0

私はアウトに署名し、サインインを再び再び主張を作成するためにした場合、情報が瞬時に入手可能であるか、またはページがクッキーを更新したりするためにリフレッシュされなければなりませんそんな感じ? –

+0

古い情報が** Principal **オブジェクトに引き続き添付されているため、同じ要求内でPrincipalを使用して追加の処理を実行する必要はありません。 – Win

14

SignOutAsyncSignInAsyncの代わりに、RefreshSignInAsyncを使用することもできます。

例:

var user = await _userManager.FindByIdAsync(yourId); 
await _signInManager.RefreshSignInAsync(user); 
関連する問題