用户.IsInRole不能在服务器上工作
本文关键字:工作 服务器 IsInRole 不能 用户 | 更新日期: 2023-09-27 17:52:36
我使用的是ASP。。NET 2012, SQL Server 2008和c#为我的网站。当我执行以下代码时:
if(User.IsInRole("Admin"))
Response.Redirect("test.aspx");
在Default.aspx.cs
和运行在Visual Studio本地没有错误。在部署我的网站并尝试使用Admin Role
中的用户登录后,服务器上出现以下错误:
时发生与网络相关或特定于实例的错误建立到SQL Server的连接。未找到服务器或无法访问。验证实例名是否正确SQL Server已配置为允许远程连接。(供应商:SQL网络接口,错误:26 -定位服务器/实例错误指定)
我的ASP。. NET成员数据库位于主机上。我应该在Default.aspx.cs
使用连接字符串吗?如果是,我该如何写呢?
我确定我登录的User
在Admin Role
中。
web.config
:
<configuration>
<appSettings>
<add key="ValidationSettings:UnobtrusiveValidationMode" value="None"/>
</appSettings>
<connectionStrings>
<add name="MembersConnectionString"
connectionString="workstation id=mssql;packet size=4096;user id=shahi_SQLLogin_1;pwd=password;data source=mssql;persist security info=False;initial catalog=akhbarrr" />
<add name="SabteAKhabar"
connectionString="workstation id=mssql;packet size=4096;user id=shahi_SQLLogin_1;pwd=password;data source=mssql;persist security info=False;initial catalog=akhbarrr" />
<add name="ConnectionString"
connectionString="workstation id=mssql;packet size=4096;user id=shahi_SQLLogin_1;pwd=password;data source=mssql;persist security info=False;initial catalog=akhbarrr" />
<add name="akhbarrConnectionString"
connectionString="workstation id=mssql;packet size=4096;user id=shahi_SQLLogin_1;pwd=password;data source=mssql;persist security info=False;initial catalog=akhbarrr"
providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<customErrors mode="Off">
<error statusCode="403" redirect="access.aspx"/>
<error statusCode="404" redirect="nofile.aspx"/>
</customErrors>
<anonymousIdentification enabled="true"/>
<profile enabled="true" defaultProvider="AspNetSqlProfileProvider">
<properties>
<add name="FirstName" allowAnonymous="false"/>
<add name="LastName" allowAnonymous="false"/>
<add name="AkharinMadrak" allowAnonymous="false"/>
<add name="Reshte" allowAnonymous="false"/>
<add name="Gerayesh" allowAnonymous="false"/>
<add name="NahveAshnayi" allowAnonymous="false"/>
<add name="Address" allowAnonymous="false"/>
<add name="PostalKod" allowAnonymous="false"/>
<add name="City" allowAnonymous="false"/>
<add name="Town" allowAnonymous="false"/>
<add name="Number" allowAnonymous="false"/>
<add name="BirthDay" type="System.DateTime" allowAnonymous="false"/>
</properties>
</profile>
<authorization>
<allow roles="Managers"/>
<allow roles="Admin"/>
<allow roles="AdminAsli"/>
</authorization>
<authentication mode="Forms">
<forms timeout="5" cookieless="AutoDetect" protection="All"/>
</authentication>
<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
<providers>
<clear/>
<add name="SqlProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="MembersConnectionString" applicationName="MyApplication" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" passwordFormat="Hashed"/>
</providers>
</membership>
<roleManager enabled="true"/>
<pages validateRequest="false" enableEventValidation="false" viewStateEncryptionMode="Never" enableViewStateMac="false"/>
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="System.Web.Extensions.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
</assemblies>
</compilation>
<httpRuntime/>
<machineKey validationKey="1234567890123456789012345678901234567890AAAAAAAAAA" decryptionKey="123456789012345678901234567890123456789012345678" validation="SHA1" decryption="Auto"/>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<handlers>
<add name="MSCaptcha" path="CaptchaImage.axd" verb="GET" type="MSCaptcha.CaptchaImageHandler, MSCaptcha" preCondition="integratedMode,runtimeVersionv2.0"/>
</handlers>
</system.webServer>
<system.net>
<mailSettings>
<smtp from="xxxxxx@gmail.com">
<network host="smtp.gmail.com" password="xxxxxx" port="587" userName="farzanehsd@gmail.com" enableSsl="true"/>
</smtp>
</mailSettings>
</system.net>
</configuration>
您已经定义了成员资格提供程序所需的所有细节—但是角色提供程序还没有定义!
<!-- you're providing all the details for the membership provider ...... -->
<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
<providers>
<clear/>
<add name="SqlProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="MembersConnectionString" applicationName="MyApplication" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" passwordFormat="Hashed"/>
</providers>
</membership>
<!-- but nothing at all really for the role provider. -->
<roleManager enabled="true"/>
请参阅Scott Allen的这篇博客文章,其中介绍了如何定义角色提供者的详细信息,定义在哪里查找信息以及使用什么角色提供者——并像您为角色提供者的成员所做的一样!
这与用户或角色无关。错误消息告诉您哪里出了问题以及该怎么做:您的程序无法访问SQL数据库,因此您需要检查它是否正确设置。具体来说,检查:
- SQL server正在运行
- 你的SQL服务器被设置为接受来自程序的连接你的程序在
Web.config
文件 中有正确的连接字符串
你的c#代码没有错误,因为错误信息清楚地告诉你。
连接数据库错误,很可能是由于配置文件中缺少或不正确的条目引起的。
示例配置:<connectionStrings>
<add name="MembersConnectionString"
connectionString="Data Source=akhbarrr.mssql.somee.com;packet size=4096;User Id=YourUserID;Password=YourPassword;persist security info=False;Initial Catalog=akhbarrr" />
<add name="SabteAKhabar"
connectionString="Data Source=akhbarrr.mssql.somee.com;packet size=4096;User Id=YourUserID;Password=YourPassword;persist security info=False;Initial Catalog=akhbarrr" />
<add name="ConnectionString"
connectionString="Data Source=akhbarrr.mssql.somee.com;packet size=4096;User Id=YourUserID;Password=YourPassword;persist security info=False;Initial Catalog=akhbarrr" />
<add name="akhbarrConnectionString"
connectionString="Data Source=akhbarrr.mssql.somee.com;packet size=4096;User Id=YourUserID;Password=YourPassword;persist security info=False;Initial Catalog=akhbarrr"
providerName="System.Data.SqlClient" />
</connectionStrings>
参考/延伸阅读:有关ASP配置方面的更多信息。. NET会员资格请参见:http://msdn.microsoft.com/en-us/library/6e9y4s5t(v=vs.100).aspx
选择答案
因为您的会员应用程序名称称为MyApplication
。您能确保您的aspnet_Applications
数据库表中的ApplicationId
值与您的角色的aspnet_Roles
表中的值匹配吗?
在aspnet_Roles
表中,您将找到当前ASP的列表。. NET成员角色。您能确保您的角色在那里存在并且ApplicationId值与您的aspnet_Applications
表中的值匹配吗?
您可以运行此查询来查看您设置了哪些角色以及针对哪些ASP。. NET会员申请:
SELECT APP.ApplicationId, APP.ApplicationName, ROLES.RoleName, ROLES.RoleId
FROM dbo.aspnet_Applications AS APP
JOIN dbo.aspnet_Roles AS ROLES ON APP.ApplicationId = ROLES.ApplicationId