AccountController
の承認を、MVC5
アプリでオーバーライドしました。Owin Authorizationタイムアウト後にEFがAspNetUsersエラーを投げる
Invalid object name 'dbo.AspNetUsers'.
私が使用していない:それはとアウトの許可時間は、代わりに戻っLogin
ページに私をリダイレクトする、それがエラーをスローした場合、ただしなど、コンテキストを取得し、ログアウトで罰金ログの作品認証にはEF
が、サービスではないので、私はこれらのテーブルを持っていません。しかし、私はエラーをスローするためにこのコードを打っている場所を見つけることができません。
AccountController.cs:
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return View(model);
}
var userRequest = new RequestObject
{
Name = model.Username,
Password = model.Password
};
try
{
var result = await client.LoginUserAsync(userRequest);
if (result == 0)
{
var user = new User
{
Name = model.Username
};
OwinSignIn(user);
return RedirectToAction("Index", "Home");
}
}
catch (Exception)
{
// TODO: log error
}
ModelState.AddModelError("", "Invalid login attempt.");
return View(model);
}
private void OwinSignIn(User user, bool isPersistence = false)
{
var claims = new[] {
new Claim(ClaimTypes.Name, user.Name)
};
var identity = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie);
var result = client.GetUserRoles(userRequest);
var roles = result.Roles.ToList();
if (roles.Any())
{
var roleClaims = roles.Select(r => new Claim(ClaimTypes.Role, r.Name));
identity.AddClaims(roleClaims);
}
AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = isPersistence }, identity);
}
私が署名し、期限切れにその承認を待っていた場合でも、このは唯一起こります。私はちょうどそれがちょうどLogin
ページに戻ることを確かめるために私が更新しなかった方法を確信していません - セッションをチェックしている何かがまだどこかで有効ですが、私はどこがわからないのですか?
ありがとうございました。
UPDATE:私はOnValidateIdentity
呼び出しを削除した場合
、問題が消えます。これを修正できるかどうかわからない場合は...
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
Provider = new CookieAuthenticationProvider
{
// Enables the application to validate the security stamp when the user logs in.
// This is a security feature which is used when you change a password or add an external login to your account.
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
}
});
あなたは 'AspNetUsers'というテーブルを持っていませんか?奇妙な。ソリューションでその文字列を検索しましたか? –
@MariaInesParnisari - いいえ、私はそのテーブルを持っていません。前述のように、独自のテーブルに対する認証を処理する既存のWebサービスがあります。質問の中のメソッドをオーバーライドすると、それを使ってログインすることができます。どこかでSessionEndで何かが起こっていて、そこから戻ってそのテーブルを探しています。その文字列は解のどこにも見つかりません。 – ragerory
Authorize属性をオーバーライドしましたか? –