Hii ,
From so many days i am struggling to implement asp.net membership for external logins to authticate the users.
I did lots of reserch on internet, all i found was related to MVC and MVC ...I am new to technology and working on non mvc version currently . I am suing asp.net 4.0 again its not MVC
Please suggest me and i need everyone guidance on my starting phase of development ..
I am sharing what i tried so far ..Please help me
I got facebook and google buttons on page .. but ewhen i click thiese buttons it throws an error
My AuthConfig file:-
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.Membership.OpenAuth;
namespace AutoSpareParts
{
internal static class AuthConfig
{
public static void RegisterOpenAuth()
{
OpenAuth.AuthenticationClients.AddFacebook(
appId: "your Facebook app id",
appSecret: "your Facebook app secret");
OpenAuth.AuthenticationClients.AddGoogle();
}
}
}
My user control :-
OpenAuthProvider.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="OpenAuthProviders.ascx.cs" Inherits="AutoSpareParts.Account.OpenAuthProviders" %>
<%@ Import Namespace="Microsoft.AspNet.Membership.OpenAuth" %>
<fieldset class="open-auth-providers">
<%----%>
<asp:ListView runat="server" ID="providersList" ViewStateMode="Disabled">
<ItemTemplate>
<button type="submit" name="provider" value="<%# HttpUtility.HtmlAttributeEncode(Item<ProviderDetails>().ProviderName) %>"
title="Log in using your <%# HttpUtility.HtmlAttributeEncode(Item<ProviderDetails>().ProviderDisplayName) %> account.">
<%# HttpUtility.HtmlEncode(Item<ProviderDetails>().ProviderDisplayName) %>
</button>
</ItemTemplate>
<EmptyDataTemplate>
<div class="message-info">
<p>There are no external authentication services configured. See <a href="http://go.microsoft.com/fwlink/?LinkId=252803">this article</a> for details on setting up this ASP.NET application to support logging in via external services.</p>
</div>
</EmptyDataTemplate>
</asp:ListView>
</fieldset>
OpenAuthProvider.ascx.cs
using System;
using System.Collections.Generic;
using System.Web;
using Microsoft.AspNet.Membership.OpenAuth;
namespace AutoSpareParts.Account
{
public partial class OpenAuthProviders : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
Page.PreRenderComplete += Page_PreRenderComplete;
if (IsPostBack)
{
var provider = Request.Form["provider"];
if (provider == null)
{
return;
}
var redirectUrl = "~/Account/RegisterExternalLogin";
if (!String.IsNullOrEmpty(ReturnUrl))
{
var resolvedReturnUrl = ResolveUrl(ReturnUrl);
redirectUrl += "?ReturnUrl=" + HttpUtility.UrlEncode(resolvedReturnUrl);
}
OpenAuth.RequestAuthentication(provider, redirectUrl);
}
}
protected void Page_PreRenderComplete(object sender, EventArgs e)
{
providersList.DataSource = OpenAuth.AuthenticationClients.GetAll();
providersList.DataBind();
}
protected T Item<T>() where T : class
{
return Page.GetDataItem() as T ?? default(T);
}
public string ReturnUrl { get; set; }
}
}
REgisterExternalLogin.aspx
<%@ Page Language="C#" Title="Register an external login" MasterPageFile="~/UserMaster.Master" AutoEventWireup="true" CodeBehind="RegisterExternalLogin.aspx.cs" Inherits="AutoSpareParts.Account.RegisterExternalLogin" %>
<asp:Content ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<hgroup class="title">
<h1>Register with your <%: ProviderDisplayName %> account</h1>
<h2><%: ProviderUserName %>.</h2>
</hgroup>
<asp:Label runat="server" ID="providerMessage" CssClass="field-validation-error" />
<asp:PlaceHolder runat="server" ID="userNameForm">
<fieldset>
<legend>Association Form</legend>
<p>
You've authenticated with <strong><%: ProviderDisplayName %></strong> as
<strong><%: ProviderUserName %></strong>. Please enter a user name below for the current site
and click the Log in button.
</p>
<ol>
<li class="email">
<asp:Label runat="server" AssociatedControlID="userName">User name</asp:Label>
<asp:TextBox runat="server" ID="userName" />
<asp:RequiredFieldValidator runat="server" ControlToValidate="userName"
Display="Dynamic" ErrorMessage="User name is required" ValidationGroup="NewUser" />
<asp:Label runat="server" ID="userNameMessage" CssClass="field-validation-error" />
</li>
</ol>
<asp:Button runat="server" Text="Log in" ValidationGroup="NewUser" OnClick="logIn_Click" />
<asp:Button runat="server" Text="Cancel" CausesValidation="false" OnClick="cancel_Click" />
</fieldset>
</asp:PlaceHolder>
</asp:Content>
RegisterExternalLogin.aspx.cs
using System;
using System.Web;
using System.Web.Security;
using DotNetOpenAuth.AspNet;
using Microsoft.AspNet.Membership.OpenAuth;
namespace AutoSpareParts.Account
{
public partial class RegisterExternalLogin : System.Web.UI.Page
{
protected string ProviderName
{
get { return (string)ViewState["ProviderName"] ?? String.Empty; }
private set { ViewState["ProviderName"] = value; }
}
protected string ProviderDisplayName
{
get { return (string)ViewState["ProviderDisplayName"] ?? String.Empty; }
private set { ViewState["ProviderDisplayName"] = value; }
}
protected string ProviderUserId
{
get { return (string)ViewState["ProviderUserId"] ?? String.Empty; }
private set { ViewState["ProviderUserId"] = value; }
}
protected string ProviderUserName
{
get { return (string)ViewState["ProviderUserName"] ?? String.Empty; }
private set { ViewState["ProviderUserName"] = value; }
}
protected void Page_Load()
{
if (!IsPostBack)
{
ProcessProviderResult();
}
}
protected void logIn_Click(object sender, EventArgs e)
{
CreateAndLoginUser();
}
protected void cancel_Click(object sender, EventArgs e)
{
RedirectToReturnUrl();
}
private void ProcessProviderResult()
{
ProviderName = OpenAuth.GetProviderNameFromCurrentRequest();
if (String.IsNullOrEmpty(ProviderName))
{
Response.Redirect(FormsAuthentication.LoginUrl);
}
var redirectUrl = "~/Account/RegisterExternalLogin";
var returnUrl = Request.QueryString["ReturnUrl"];
if (!String.IsNullOrEmpty(returnUrl))
{
redirectUrl += "?ReturnUrl=" + HttpUtility.UrlEncode(returnUrl);
}
var authResult = OpenAuth.VerifyAuthentication(redirectUrl);
ProviderDisplayName = OpenAuth.GetProviderDisplayName(ProviderName);
if (!authResult.IsSuccessful)
{
Title = "External login failed";
userNameForm.Visible = false;
providerMessage.Text = String.Format("External login {0} failed,", ProviderDisplayName);
Trace.Warn("OpenAuth", String.Format("There was an error verifying authentication with {0})", ProviderDisplayName), authResult.Error);
return;
}
if (OpenAuth.Login(authResult.Provider, authResult.ProviderUserId, createPersistentCookie: false))
{
RedirectToReturnUrl();
}
ProviderName = authResult.Provider;
ProviderUserId = authResult.ProviderUserId;
ProviderUserName = authResult.UserName;
Form.Action = ResolveUrl(redirectUrl);
if (User.Identity.IsAuthenticated)
{
OpenAuth.AddAccountToExistingUser(ProviderName, ProviderUserId, ProviderUserName, User.Identity.Name);
RedirectToReturnUrl();
}
else
{
userName.Text = authResult.UserName;
}
}
private void CreateAndLoginUser()
{
if (!IsValid)
{
return;
}
var createResult = OpenAuth.CreateUser(ProviderName, ProviderUserId, ProviderUserName, userName.Text);
if (!createResult.IsSuccessful)
{
userNameMessage.Text = createResult.ErrorMessage;
}
else
{
if (OpenAuth.Login(ProviderName, ProviderUserId, createPersistentCookie: false))
{
RedirectToReturnUrl();
}
}
}
private void RedirectToReturnUrl()
{
var returnUrl = Request.QueryString["ReturnUrl"];
if (!String.IsNullOrEmpty(returnUrl) && OpenAuth.IsLocalUrl(returnUrl))
{
Response.Redirect(returnUrl);
}
else
{
Response.Redirect("~/");
}
}
}
}