Password recovery widget error after upgrade to 5.1 SP1
Our password recovery widget results in error after upgrading from 5.0 to 5.1SP1.
This is our template (PasswordRecovery.ascx):
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="PasswordRecovery.ascx.cs" Inherits="SitefinityWebApp.Widgets5.PasswordRecovery" %>
<%@ Register TagPrefix="sf" Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Security.Web.UI" %>
<
style
type
=
"text/css"
>
.sfFailure
color: Red;
.sfTxtLbl
clear: left;
float: left;
margin: 0 0 0 0;
.sfValidator
clear: left;
float: left;
color: Red;
.sfSave
background-color: transparent;
cursor: pointer;
width: 78px;
height: 30px;
margin: 15px 0 15px 10px;
.sfLinkBtnIn
line-height: 30px;
height: 30px;
strong.sfLinkBtnIn
background: url(<%= ResolveUrl("~/App_Themes") %>/Default/Images/sfButton_Right.png) top right no-repeat;
color: Black;
a.sfSave:hover strong
color: Gray !important;
text-decoration: none;
.sfLinkBtn
clear: both;
padding-left:1px;
font-size:11px;
display: block;
width:auto;
float:left;
text-decoration:none;
margin-left: 30px;
.sfLinkBtnIn
padding-right:25px;
display:block;
height:30px;
width:auto;
float: left;
line-height: 26px;
color: #000;
border:0;
padding: 0 25px 0 10px;
font-size: 12px;
font-family:arial;
font-weight: bold;
cursor: hand;
.cancelDiv
margin: 30px 0 0 0;
.liStyle
list-style-type: none;
.sfFormList .liStyle li
list-style-type: none;
.sfTxtLbl
clear: both;
margin: 0 0 0 0;
padding: 2px 0 0 0;
</
style
>
<
sf:PasswordRecoveryForm
ID
=
"PasswordRecoveryForm1"
runat
=
"server"
AllowSelectMembershipProvider
=
"false"
MembershipProvider
=
"OpenAccessMembership37Provider"
ValidationGroup
=
"ValidatePasswordRecovery1"
CancelDestinationPageUrl
=
"~/"
ContinueDestinationPageUrl
=
"~/Community/UserLogin.aspx"
>
<
MailDefinition
From
=
"myworkingemail@mycompany.com"
Subject="<%$ Resources:Main, PassRecovery_MailSubject %>" BodyFileName="<%$ Resources:Main, PassRecovery_MailBody %>" IsBodyHtml="true" />
<
UserNameTemplate
>
<
h3
><
asp:Label
ID
=
"lblForgotYourPassword"
runat
=
"server"
Text="<%$ Resources:Main, ForgotYourPassword %>" /></
h3
>
<
asp:Label
ID
=
"FailureText"
runat
=
"server"
EnableViewState
=
"False"
CssClass
=
"sfFailure"
/>
<
fieldset
style
=
"padding: 10px 10px 10px 10px;"
>
<
p
><
asp:Label
ID
=
"lblEnterUN"
runat
=
"server"
Text="<%$ Resources:Main, EnterYourUserName %>" /></
p
>
<
ol
class
=
"sfFormList"
>
<
li
id
=
"ProvidersHolder"
runat
=
"server"
class
=
"liStyle"
>
<
asp:Label
ID
=
"Label4"
Text="<%$ Resources:Labels, Provider %>" AssociatedControlID="ProvidersList" runat="server" CssClass="sfTxtLbl" />
<
asp:DropDownList
ID
=
"ProvidersList"
AutoPostBack
=
"false"
AccessKey
=
"l"
runat
=
"server"
/>
</
li
>
<
li
class
=
"liStyle"
>
<
asp:Label
ID
=
"lblUname1"
runat
=
"server"
Text="<%$ Resources:Main, Username %>" CssClass="sfTxtLbl" />:
<
asp:TextBox
ID
=
"UserName"
runat
=
"server"
></
asp:TextBox
>
<
asp:RequiredFieldValidator
ID
=
"UserNameRequired"
runat
=
"server"
ControlToValidate
=
"UserName"
ErrorMessage="<%$ Resources:Main, UserNameIsRequired %>" ToolTip="<%$ Resources:Main, UserNameIsRequired %>"
ValidationGroup="ValidatePasswordRecovery1" CssClass="sfValidator"></
asp:RequiredFieldValidator
>
</
li
>
<
li
class
=
"liStyle"
>
<
br
/>
<
telerik:RadCaptcha
ID
=
"radCaptcha"
runat
=
"server"
ValidationGroup
=
"ValidatePasswordRecovery1"
ProtectionMode
=
"Captcha"
ErrorMessage="<%$ Resources:Main, CaptchaErrorMessage %>"
CaptchaTextBoxLabel="<%$ Resources:Main, CaptchaTextBoxLabel %>"></
telerik:RadCaptcha
>
</
li
>
</
ol
>
<
p
class
=
"sfSubmitBtn sfMainFormBtns"
>
<
asp:ImageButton
ID
=
"SubmitButton"
runat
=
"server"
ValidationGroup
=
"ValidatePasswordRecovery1"
ImageUrl
=
"~/App_Themes/Default/Images/LoginButton_en.png"
CssClass
=
"sfLinkBtn sfSave"
ToolTip="<%$ Resources:Main, Submit %>" />
<
div
id
=
"divCancel"
class
=
"cancelDiv"
>
<
asp:Label
ID
=
"lblOr"
runat
=
"server"
Text="<%$ Resources:Labels, Or %>" />
<
asp:LinkButton
ID
=
"CancelButton"
runat
=
"server"
CausesValidation
=
"False"
CommandName
=
"Cancel"
Text="<%$ Resources:Labels, Cancel %>" class="sfCancel" />
</
div
>
<!-- do not remove this button. It is used for the default form submit (pressing enter) -->
<
span
style
=
"display:none;"
>
<
asp:Button
ID
=
"hiddenSubmitButton"
runat
=
"server"
/>
</
span
>
</
p
>
</
fieldset
>
</
UserNameTemplate
>
</
sf:PasswordRecoveryForm
>
Server Error in '/G6PD51' Application.
--------------------------------------------------------------------------------
There is no configuration for data provider with the name of "OPENACCESSMEMBERSHIP37PROVIDER,OPENACCESSMEMBERSHIP37PROVIDER,OPENACCESSMEMBERSHIP37PROVIDER" for "Telerik.Sitefinity.Security.UserManager" manager. Please check the spelling of the name and whether such configuration exists.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: Telerik.Sitefinity.Data.MissingProviderConfigurationException: There is no configuration for data provider with the name of "OPENACCESSMEMBERSHIP37PROVIDER,OPENACCESSMEMBERSHIP37PROVIDER,OPENACCESSMEMBERSHIP37PROVIDER" for "Telerik.Sitefinity.Security.UserManager" manager. Please check the spelling of the name and whether such configuration exists.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[MissingProviderConfigurationException: There is no configuration for data provider with the name of "OPENACCESSMEMBERSHIP37PROVIDER,OPENACCESSMEMBERSHIP37PROVIDER,OPENACCESSMEMBERSHIP37PROVIDER" for "Telerik.Sitefinity.Security.UserManager" manager. Please check the spelling of the name and whether such configuration exists.]
Telerik.Sitefinity.Data.ManagerBase`1.SetProvider(String providerName, String transactionName) +471
Telerik.Sitefinity.Data.ManagerBase`1.GetManager(String providerName, String transactionName) +593
Telerik.Sitefinity.Security.Web.UI.PasswordRecoveryForm.AttemptSendPasswordUserNameView() +134
Telerik.Sitefinity.Security.Web.UI.PasswordRecoveryForm.OnBubbleEvent(Object source, EventArgs e) +86
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +52
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5492
System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +742
System.Web.UI.Page.ProcessRequest() +269
System.Web.UI.Page.ProcessRequest(HttpContext context) +140
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +533
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +256
--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.272
AllowSelectMembershipProvider="true"
Just to close this issue:
We've discovered that after upgrading the Login Control we use (offering "backward compatibility") injects the Membership Provider 3 times when generating links. This causes the problem for our custom Password Reminder control.
Our Login control main settings are:
- AllowSelectMembershipProvider: False
- CreateUserUrl: ~/Register.aspx
- DestinationPageUrl: ~/
- LayoutTemplatePath: ~/SFRes/Telerik.Sitefinity.Resources.Templates.PublicControls.LoginControl.ascx
- MembershipProvider: OpenAccessMembership37Provider
- PasswordChangeUrl: ~/Sitefinity/Login/ChangePassword.aspx
- PasswordRecoveryUrl: ~/PasswordReminder.aspx
Now, the url produced by the login control for all links (register, password reminder) is something as follows:
http://localhost
:32154/Site/PasswordReminder.aspx?provider=OpenAccessMembership37Provider&provider=OpenAccessMembership37Provider&provider=OpenAccessMembership37Provider:32154/Site/PasswordReminder.aspx?provider=OpenAccessMembership37Provider&provider=OpenAccessMembership37Provider&provider=OpenAccessMembership37Provider
if (Request.Url.Query.Length > 0)
Response.Redirect(Request.Url.AbsolutePath.ToString());