我正努力通过使用Visual Studio 2013模板(新网站> Web窗体Asp.NET)通过Facebook进行身份验证。
这个模板的好处在于它为您提供了使用.NET身份所需的所有代码,以及明显易于定制的Facebook(以及其他提供商)的登录功能。
我已完全遵循ASP.NET网站中提供的说明,但仍然收到相同的错误消息:object reference not set to an object instance
Line 35: If Not IsPostBack Then
Line 36: Dim manager = New UserManager()
Line 37: Dim loginInfo = Context.GetOwinContext().Authentication.GetExternalLoginInfo()
Line 38: If loginInfo Is Nothing Then
Line 39: Response.Redirect("~/Account/Login")
[NullReferenceException: Object reference not set to an object instance.]
在我的登录页面的代码后面,我使用以下代码:
Imports Microsoft.AspNet.Identity
Imports Microsoft.AspNet.Identity.EntityFramework
Imports Microsoft.AspNet.Identity.Owin
Imports System.Linq
Imports System.Web
Imports System.Web.UI
Imports Microsoft.Owin.Security
Public Partial Class Account_Login
Inherits Page
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
RegisterHyperLink.NavigateUrl = "Register"
OpenAuthLogin.ReturnUrl = Request.QueryString("ReturnUrl")
Dim returnUrl = HttpUtility.UrlEncode(Request.QueryString("ReturnUrl"))
If Not [String].IsNullOrEmpty(returnUrl) Then
RegisterHyperLink.NavigateUrl += "?ReturnUrl=" & returnUrl
End If
End Sub
Protected Sub LogIn(sender As Object, e As EventArgs)
If IsValid Then
' Convalidare la password utente
Dim manager = New UserManager()
Dim user As ApplicationUser = manager.Find(UserName.Text, Password.Text)
If user IsNot Nothing Then
IdentityHelper.SignIn(manager, user, RememberMe.Checked)
IdentityHelper.RedirectToReturnUrl(Request.QueryString("ReturnUrl"), Response)
Else
FailureText.Text = "Nome utente o password non valida."
ErrorMessage.Visible = True
End If
End If
End Sub
End Class
在我的Register页面的代码后面,我使用以下代码:
Imports Microsoft.AspNet.Identity
Imports Microsoft.AspNet.Identity.EntityFramework
Imports Microsoft.AspNet.Identity.Owin
Imports System.Security.Claims
Imports System.Web
Imports Microsoft.Owin.Security
Public Partial Class Account_RegisterExternalLogin
Inherits System.Web.UI.Page
Protected Property ProviderName() As String
Get
Return If(DirectCast(ViewState("ProviderName"), String), [String].Empty)
End Get
Private Set(value As String)
ViewState("ProviderName") = value
End Set
End Property
Protected Property ProviderAccountKey() As String
Get
Return If(DirectCast(ViewState("ProviderAccountKey"), String), [String].Empty)
End Get
Private Set(value As String)
ViewState("ProviderAccountKey") = value
End Set
End Property
Protected Sub Page_Load() Handles Me.Load
' Elaborare il risultato fornito da un provider di autenticazione nella richiesta
ProviderName = IdentityHelper.GetProviderNameFromRequest(Request)
If [String].IsNullOrEmpty(ProviderName) Then
Response.Redirect("~/Account/Login")
End If
If Not IsPostBack Then
Dim manager = New UserManager()
Dim loginInfo = Context.GetOwinContext().Authentication.GetExternalLoginInfo()
If loginInfo Is Nothing Then
Response.Redirect("~/Account/Login")
End If
Dim appuser = manager.Find(loginInfo.Login)
If appuser IsNot Nothing Then
IdentityHelper.SignIn(manager, appuser, isPersistent:=False)
IdentityHelper.RedirectToReturnUrl(Request.QueryString("ReturnUrl"), Response)
ElseIf User.Identity.IsAuthenticated Then
Dim verifiedloginInfo = Context.GetOwinContext().Authentication.GetExternalLoginInfo(IdentityHelper.XsrfKey, User.Identity.GetUserId())
If verifiedloginInfo Is Nothing Then
Response.Redirect("~/Account/Login")
End If
Dim result = manager.AddLogin(User.Identity.GetUserId(), verifiedloginInfo.Login)
If result.Succeeded Then
IdentityHelper.RedirectToReturnUrl(Request.QueryString("ReturnUrl"), Response)
Else
AddErrors(result)
Return
End If
Else
userName.Text = loginInfo.DefaultUserName
End If
End If
End Sub
Protected Sub LogIn_Click(sender As Object, e As EventArgs)
CreateAndLoginUser()
End Sub
Private Sub CreateAndLoginUser()
If Not IsValid Then
Return
End If
Dim manager = New UserManager()
Dim user = New ApplicationUser() With {.UserName = userName.Text}
Dim result = manager.Create(user)
If Not result.Succeeded Then
AddErrors(result)
Return
End If
Dim loginInfo = Context.GetOwinContext().Authentication.GetExternalLoginInfo()
If loginInfo Is Nothing Then
Response.Redirect("~/Account/Login")
Return
End If
result = manager.AddLogin(user.Id, loginInfo.Login)
If Not result.Succeeded Then
AddErrors(result)
Return
End If
IdentityHelper.SignIn(manager, user, False)
IdentityHelper.RedirectToReturnUrl(Request.QueryString("ReturnUrl"), Response)
Return
End Sub
Private Sub AddErrors(result As IdentityResult)
For Each [error] As String In result.Errors
ModelState.AddModelError("", [error])
Next
End Sub
End Class
现在我正试图让它发挥作用,但我无法找到解决方案。
非常感谢帮助。
由于
答案 0 :(得分:1)
我通过简单地更新所有包来解决问题。
由于