2009-09-23 4 views
1

Ok, j'ai publié un site en utilisant l'authentification par formulaires. Cela fonctionne sur mon serveur de transfert. cela ne fonctionne pas sur le serveur de production. La seule chose différente est sql est sur une machine différente pour la production. Le site fonctionne, montrant des données de sql, mais quand j'utilise le lien de connexion sur le site, il affiche le formulaire de connexion, je me connecte, il redirige vers la page principale, où il dit toujours "login" à la place de "déconnexion".Site lorsque publié ne permet pas de connexion

J'ai essayé aspnet_regsql pour désinstaller/installer l'authentification par formulaires pour le serveur. J'ai redémarré le service www. Voici une partie de mon web.config

<membership> 
    <providers> 
    <remove name="AspNetSqlMembershipProvider"/> 
    <add name="AspNetSqlMembershipProvider" 
     type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
     connectionStringName="LocalSqlServer" 
     enablePasswordRetrieval="true" 
     enablePasswordReset="true" 
     requiresQuestionAndAnswer="true" 
     applicationName="/TriState" 
     requiresUniqueEmail="true" 
     minRequiredPasswordLength="4" 
     minRequiredNonalphanumericCharacters="0" 
     passwordFormat="Clear" 
     maxInvalidPasswordAttempts="5" 
     passwordAttemptWindow="10" 
     passwordStrengthRegularExpression="" /> 
    </providers> 
</membership> 
+0

est pas dans le répertoire virtuel, il est/ –

+2

Je suppose que la chaîne de connexion définie aux points de LocalSqlServer au serveur SQL publiée que vous J'ai lancé aspnet_regsql contre? –

+0

Où est situé LocalSqlServer? Est-ce la chaîne de connexion correcte à utiliser dans ce cas? –

Répondre

1

Comment créez-vous les rôles et les utilisateurs dans l'environnement de production? Utilisez-vous une sauvegarde de la base de données de développement? Dans ce cas, faites attention à la table aspnet_Applications. Assurez-vous que le nom de l'application dans l'environnement de développement et de production est le même. Sinon, essayez d'éditer la table à la main.

+0

J'ai créé une base de données vide et j'ai lancé aspnet_regsql –

+1

La nouvelle base de données n'a aucune information sur les applications, les rôles et les utilisateurs. Vous devez les ajouter vous-même. Le moyen le plus simple consiste à utiliser l'outil de configuration ASP.NET dans Visual Studio. – kgiannakakis

+0

Si vous avez créé une base de données vide et que vous avez exécuté aspnet_regsql, cette nouvelle base de données utilisée par votre site Web publié ne contient aucune information sur votre nom d'utilisateur et votre mot de passe. Vous devez ajouter cette information. De plus, si votre application possède un dossier App_Data, assurez-vous de le supprimer ou du moins de ne pas le publier, car si vous le faites, votre application créera un db dans ce dossier et essaiera de l'utiliser à la place. Bonne chance! –

0

est votre page de connexion par hasard le nom login.aspx? J'avais un problème avec ceci dans le passé, car il crée le même nom de classe que le contrôle de connexion et un conflit se produit. Dans mon cas, j'ai eu l'écran jaune de la mort, c'est-à-dire la trace de la pile, puisqu'elle a déclenché une exception, mais j'ai ensuite renommé la page et tout allait bien.

+0

Il est login.aspx mais ... la "classe" dans le codeBehind je l'ai changé pour "LoginPage" –

0

Vous devez définir explicitement le nom de votre application. Vérifiez votre base de données pour la table d'application. Si vous avez deux entrées, le système utilise un nom d'application différent pour votre boîte de dev et le serveur. Si vous définissez explicitement le nom, il n'y aura pas de conflit.

+0

Il n'y en a qu'un. J'ai supprimé les tables avec aspnet_regsql et les ai rajoutées. –

0

Est-il possible que l'application ne réponde pas aux bons cookies? Sur nos serveurs de test, le nom d'hôte est différent des serveurs de production et les cookies se retrouvent dans un domaine différent. Les serveurs de test et de production doivent connaître les domaines qu'ils servent à renvoyer les bons cookies (en enregistrant les noms et les domaines dans la base de données).

+0

Je ne sais pas. J'utilise les contrôles standards asp.net pour la connexion, etc. –

+0

@Rick: essayez de vous connecter en utilisant Firefox avec LiveHTTPHeaders ou les outils de développement Web, et regardez les en-têtes HTTP. Recherchez les en-têtes des cookies et vérifiez si le domaine du cookie correspond au domaine du site. Vous verrez quelque chose comme 'Set-Cookie: Pays = CA; Chemin = /; Domaine = .stackoverflow.com'; Assurez-vous que la partie .stackoverflow.com correspond correctement au nom d'hôte et au domaine de votre site de production. –

0

Avez-vous essayé de sauvegarder la base de données à partir du serveur de transfert et de la restaurer sur le serveur de production? (here are instructions to do that.)

Cela confirmera que la base de données que vous utilisez n'est pas le problème.

+0

C'est ce que j'ai fait initialement. –

0

Ok, avez-vous essayé de vous connecter manuellement pour contourner le contrôle d'adhésion? Cela exclura l'authentification des formulaires elle-même étant le problème.

 if (Request.QueryString["ReturnUrl"] != null) 
     { 
      FormsAuthentication.RedirectFromLoginPage("someuserid", false); 
     } 
     else 
     { 
      FormsAuthentication.SetAuthCookie("someuserid", false); 
      Response.Redirect("~/SomePage.aspx"); 
     } 

Vérifiez que vos utilisateurs sont configurés avec les rôles que vous avez autorisés dans l'autorisation.

<authorization> 
     <deny users="?"/> 
     <allow roles="Public"/> 
     <allow roles="AdminUser"/> 
    </authorization> 

Vérifiez si des web.configs plus bas (héritant de web.configs dossier de niveau supérieur) qui permettent ou nient le rôle de tout utilisateur en spécifiant l'autorisation.

0

Assurez-vous que votre nom de l'application est la même dans la base de données de production:

applicationName="/TriState" 
Site
Questions connexes