Avatar billede bilal_isa Nybegynder
09. oktober 2008 - 18:46 Der er 4 kommentarer og
1 løsning

Problem med Login .NET kontrol og validering

Hej eksperter,

Jeg har problemer med validering i min login kontrol på mit webhotel.
Jeg bruger Login .NET komponenten til login. Ud fra denne har jeg defineret en UserWebControl som jeg trækker ind på mine webforms. Den har jeg kaldte LoginKontrol.ascx. Validering af email og adgangskode foregår i LoginKontrol.ascx.cs fil. Fordelen ved dette er jeg kan genbruge Login kontrollen på flere webforms uden at gentage kode. Mine UserWeb kontroller ligge i en del mappe som jeg har kaldt "UserWebControls". Mine webforms ligger i en mappe som hedder "Webpages" som er på samme niveau som mappen "UserWebControls".
Sådan ser valideringen ud i LoginKontrol.ascx.cs

#region "Log ind"

        protected void LoginBoks_LoggingIn(object sender, LoginCancelEventArgs e)
        {
            String Email;
            String Adgangskode;

            Email = this.LoginBoks.UserName;
            Adgangskode = this.LoginBoks.Password;

            this.autentificer(Email, Adgangskode);
        }

        #endregion

        #region "Definition autentificer"

        private void autentificer(String email, String adgangskode)
        {
            String Navn;
            String Adresse;
            String Telefon;
            String Adgangskode;
            String Tilstand;
            String Aktiveringskode;
            DateTime DatoRegistreret;
            int KundeId;
            bool ErEmailGyldig;
            bool FindesBruger;
            bool ErBrugerAktiv;

            Navn = "";
            Adresse = "";
            Telefon = "";
            Adgangskode = "";
            Tilstand = "";
            Aktiveringskode = "";
            DatoRegistreret = new DateTime();
            KundeId = 0;
            ErEmailGyldig = false;
            FindesBruger = false;
            ErBrugerAktiv = false;

            ErEmailGyldig = EValidering.erGyldigEmail(email);

            if (ErEmailGyldig)
            {
                FindesBruger = EAutencitet.findesBruger(email, ref Adgangskode,
                    ref Navn, ref Adresse, ref Telefon, ref DatoRegistreret,
                    ref Tilstand, ref Aktiveringskode, ref KundeId);
               
                if (FindesBruger)
                {
                    ErBrugerAktiv = EAutencitet.brugerAktiv(Tilstand);
                    if (ErBrugerAktiv)
                    {
                        if (adgangskode.Equals(Adgangskode))
                        {
                            Session.Add(TypeDescriptor.GetProperties(typeof(Kunde))[0].Name, KundeId);
                            Session.Add(TypeDescriptor.GetProperties(typeof(Kunde))[1].Name, Navn);
                            Session.Add(TypeDescriptor.GetProperties(typeof(EKunde))[2].Name, email);

                            FormsAuthentication.RedirectFromLoginPage(email, false);

                            Response.Redirect(Page.Request.Url.ToString());
                        }
                        else
                        {
                            this.LoginBoks.FailureText = EMeddelelse.EMAIL_ADGANGSKODE_STEMMER_IKKE;
                        }
                    }
                    else
                    {
                        this.LoginBoks.FailureText = EMeddelelse.LOGIN_EJ_AKTIVERET;
                    }
                }
                else
                {
                    this.LoginBoks.FailureText = EMeddelelse.EMAIL_FINDES_IKKE;
                }
            }
            else
            {
                this.LoginBoks.FailureText = EMeddelelse.INDTAST_GYLDIG_EMAIL;
            }
        }

        #endregion

Når jeg logger ind med korrekt email og adgangskode går alting godt.

Men når jeg f.eks. forsøger at logge ind med en email der ikke findes i min database får jeg følgende fejlmeddelelses:

Server Error in '/' Application.
--------------------------------------------------------------------------------
An error has occurred while establishing a connection to the server.  When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)

Fejlen er lidt meningsløs da jeg forbinder til en MySQL database.
Jeg får ikke nogen fejl når jeg kører min webapplikation lokalt på min egen udviklingsmaskine med forbindelse op til databasen på mit webhotel. I øvrigt forekommer fejlen kun når jeg bruger .NET Login komponenter. Det gælder også PasswordRecovery .NET komponentet.

Jeg har testet ovenstående kode i webform. Her er et direkte link:

http://book-frisoer.dk/Webpages/TestSide.aspx

Her går det godt. Prøv evt. at logge ind med vilkårlig emailadresse.

Jeg har kontaktet mit webhotel. De kunne ikke finde fejl på deres server og de tror der er fejl i min kode eller i mine referencer, så jeg er i en lidt håbløs situation.

Håber nogen derude kan hjælpe.

På forhånd tak.
Avatar billede bilal_isa Nybegynder
09. oktober 2008 - 18:49 #1
Her er et link til webstedet:

http://book-frisoer.dk
Avatar billede keysersoze Guru
09. oktober 2008 - 18:54 #2
jeg tror at din web.config kunne være mere interessant at kigge på?
Avatar billede bilal_isa Nybegynder
09. oktober 2008 - 19:20 #3
Sådan her ser den ud

<?xml version="1.0"?>
<configuration>
    <configSections>
        <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
            <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
                <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
                <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
                    <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
                    <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
                    <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
                    <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
                </sectionGroup>
            </sectionGroup>
        </sectionGroup>
    </configSections>
    <appSettings/>
    <connectionStrings/>
    <system.web>
    <customErrors mode="Off"/>
        <!--
            Set compilation debug="true" to insert debugging
            symbols into the compiled page. Because this
            affects performance, set this value to true only
            during development.
        -->
        <compilation debug="true">
            <assemblies>
                <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
                <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
                <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
            </assemblies>
        </compilation>
        <!--
            The <authentication> section enables configuration
            of the security authentication mode used by
            ASP.NET to identify an incoming user.
        -->
    <authentication mode="Forms">
    </authentication>
        <!--
            The <customErrors> section enables configuration
            of what to do if/when an unhandled error occurs
            during the execution of a request. Specifically,
            it enables developers to configure html error pages
            to be displayed in place of a error stack trace.

        <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
            <error statusCode="403" redirect="NoAccess.htm" />
            <error statusCode="404" redirect="FileNotFound.htm" />
        </customErrors>
        -->
        <pages>
            <controls>
                <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
                <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            </controls>
        </pages>
        <httpHandlers>
            <remove verb="*" path="*.asmx"/>
            <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
      <add verb="*" path="/Websted/*.aspx" type="System.Web.UI.PageHandlerFactory" />
    </httpHandlers>
        <httpModules>
            <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </httpModules>
    </system.web>
    <system.codedom>
        <compilers>
            <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
                <providerOption name="CompilerVersion" value="v3.5"/>
                <providerOption name="WarnAsError" value="false"/>
            </compiler>
        </compilers>
    </system.codedom>
    <!--
        The system.webServer section is required for running ASP.NET AJAX under Internet
        Information Services 7.0.  It is not necessary for previous version of IIS.
    -->
    <system.webServer>
        <validation validateIntegratedModeConfiguration="false"/>
        <modules>
            <remove name="ScriptModule"/>
            <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </modules>
        <handlers>
            <remove name="WebServiceHandlerFactory-Integrated"/>
            <remove name="ScriptHandlerFactory"/>
            <remove name="ScriptHandlerFactoryAppServices"/>
            <remove name="ScriptResource"/>
            <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        </handlers>
    </system.webServer>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
                <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
            </dependentAssembly>
            <dependentAssembly>
                <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
                <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>
Avatar billede bilal_isa Nybegynder
10. oktober 2008 - 00:38 #4
Det ser ud til at det er et generelt problem ved .NET Login komponenter i min applikation. Har lagt en Login kontrol (nederst) på testsiden

http://book-frisoer.dk/Webpages/TestSide.aspx

Forbindelsen til databasen er ok, men ovennævnte fejl kommer når brugeren ikke bliver valideret og der er kald til databasen.
Avatar billede bilal_isa Nybegynder
12. oktober 2008 - 03:09 #5
Hej,

Ville bare fortælle at jeg har fundet løsninger på ovennævnte problemer som skyldes at jeg er newbie til .NET
Jeg skriver mine løsningsforslag her så andre newbies kan få gavn af dem :)

LoginControl Kontrollen kræver en MembershipProvider. Man kan erklære sin egen MembershipProvider klasse som skal implementere den abstrakte klasse MembershipProvider. Det kræver at du implementrer en del metoder.

Det kræver også at man angiver sin MembershipProvider i sin Web.Config fil på denne måde

<membership defaultProvider="EMedlemskabUdbyder">
  <providers>
      <add name="EMedlemskabUdbyder" type="EFunktionskomponent.EMedlemskabUdbyder" />
  </providers>
</membership>

EFunktionskomponent er et namespace som indeholder mit klassebibliotek. EMedlemskabUdbyder er navnet på min brugerdefinerede MembershipProvider klasse.

Man kan også løse dette problem ved at implementere sin egen validering af brugeren i Login kontrollens Authenticate event handler.

Men hvis man definerer sin en MemberShip provider kan bruge den flere steder. Hvis man f.eks. ønsker at bruge PasswordRecovery kontrollen kan det være svært uden en MembershipProvider.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester