電子メールによるアカウント確認
二段階認証
「登録されているIUserTokenProviderはありません」への対応
Startup.Auth.vb追加修正
IdentityConfig.vb追加修正
yahoo mailではcallbackUrlのcode部が修正されてしまう現象あり
(例)%2Bが+に → 認証不可となる
Gmailでは同現象なし
1.Startup.Auth.vb追加修正(太字部分)
Public Sub ConfigureAuth(app As IAppBuilder)
app.CreatePerOwinContext(AddressOf ApplicationDbContext.Create)
app.CreatePerOwinContext(Of ApplicationUserManager)(AddressOf ApplicationUserManager.Create)
' アプリケーションが Cookie を使用して、サインインしたユーザーの情報を格納できるようにします
app.UseCookieAuthentication(New CookieAuthenticationOptions() With {
.AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
.LoginPath = New PathString("/Account/Login"),
.Provider = New CookieAuthenticationProvider With {.OnValidateIdentity = SecurityStampValidator.OnValidateIdentity(Of ApplicationUserManager, ApplicationUser)(validateInterval:=TimeSpan.FromMinutes(30), regenerateIdentity:=Function(manager, user) user.GenerateUserIdentityAsync(manager))}})
' Use a cookie to temporarily store information about a user logging in with a third party login provider
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie)
・・・中略・・・
リスト10-09
2.IdentityConfig.vb追加修正(太字部分)
Public Shared Function Create(ByVal options As IdentityFactoryOptions(Of ApplicationUserManager), ByVal context As IOwinContext) As ApplicationUserManager
Dim manager = New ApplicationUserManager(New UserStore(Of ApplicationUser)(context.Get(Of ApplicationDbContext)()))
・・・中略・・・
manager.EmailService = New EmailService()
'manager.SmsService = New SmsService()
Dim dataProtectionPrivider = options.DataProtectionProvider
If Not IsNothing(dataProtectionPrivider) Then
manager.UserTokenProvider = New DataProtectorTokenProvider(Of ApplicationUser)(dataProtectionPrivider.Create("ASP.NET Identity"))
End If
Return manager
End Function
前2項からこれまでの不具合修正はMicrosoft.AspNet.Identity のバージョン変更(1.0から2.2.1)に伴うものであることが判明し、この項以後2.2.1によるテンプレートをもとに大幅修正