Asp.net формирует аутентификацию для пользователей в sqlserver - PullRequest
0 голосов
/ 22 января 2012

Я хочу использовать аутентификацию формы в ASP.net.Пользователи находятся в базе данных моего проекта.мои коды ниже. но эти коды не работают. (пользователи не могут войти).пользователи находятся в таблице «пользователи» в базе данных «новости».Мой файл web.config:

    <configuration>
  <system.web>
    <authentication mode="Forms">
      <forms loginUrl="default.aspx" name=".asp" path="/" timeout="1"   >
      </forms>
    </authentication>
    <authorization>
     <allow users="*"/>
    </authorization>
    <compilation debug="true" targetFramework="4.0"/>
    <membership>
      <providers>
        <clear/>
        <add name="MySqlMembershipProvider"
             connectionStringName="news"
             applicationName="users"
             type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"  />
      </providers>
    </membership>

  </system.web>
  <appSettings/>
  <connectionStrings>
    <add name="news" connectionString="Data Source=Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\ava\Desktop\WebSite3\App_Data\news.mdf;Integrated Security=True;User Instance=True"
     providerName="System.Data.SqlClient" />
  </connectionStrings>

  <location path="karbar.aspx">
    <system.web>
      <authorization>
        <deny users="?" />
      </authorization>
    </system.web>
  </location>
</configuration>

и мои коды в форме default.aspx для входа в систему:

> protected void Button1_Click(object sender, EventArgs e) {
>     if (FormsAuthentication.Authenticate(user.Text, pass.Text))
>     {
>         FormsAuthentication.SetAuthCookie(user.Text, true);
>         FormsAuthentication.RedirectFromLoginPage(pass.Text, true);
>     }
>     else
>         user.Text = ":((((((("; }

Ответы [ 3 ]

0 голосов
/ 22 января 2012

В следующем теге:

<forms loginUrl="default.aspx" name=".[CookieName]" path="/" timeout="1" >

Поместите имя вашего файла cookie в свойство name.

Также -> измените параметр secondde в:

FormsAuthentication.RedirectFromLoginPage(pass.Text, true);

до

FormsAuthentication.RedirectFromLoginPage(pass.Text, false);
0 голосов
/ 22 января 2012

Обновите файл конфигурации следующим образом:

<membership>
  <providers>
    <clear/>
    <add name="MySqlMembershipProvider"
         connectionStringName="ConnectionString"
         applicationName="users"
         type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"  />
  </providers>
</membership>

</system.web>

<appSettings/>
<connectionStrings>
  <add name="ConnectionString" connectionString="Data Source=Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\ava\Desktop\WebSite3\App_Data\news.mdf;Integrated Security=True;User Instance=True"
   providerName="System.Data.SqlClient" />
</connectionStrings>

Обновление Я надеюсь, что у вас также есть проблема в вашем коде, измените его на

 if (Membership.ValidateUser(user.Text, pass.Text))
 {
     FormsAuthentication.SetAuthCookie(user.Text, true);
     FormsAuthentication.RedirectFromLoginPage(user.Text, true);
 }

Обновление: Поскольку вы используете свою собственную базу данных, членство в ней не требуется

 <configuration>
  <system.web>
<authentication mode="Forms">
  <forms loginUrl="default.aspx" name=".asp" path="/" timeout="1"   >
  </forms>
</authentication>
<authorization>
 <allow users="*"/>
</authorization>
<compilation debug="true" targetFramework="4.0"/>

<connectionStrings>
<add name="news" connectionString="Data Source=Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\ava\Desktop\WebSite3\App_Data\news.mdf;Integrated Security=True;User Instance=True"
 providerName="System.Data.SqlClient" />
 </connectionStrings>
 <location path="karbar.aspx">
  <system.web>
  <authorization>
    <deny users="?" />
  </authorization>
</system.web>

См. Удалить тег <membership> все вместе.

затем в коде за чтением пользовательской записи из базы данных поместите результат в datareader

protected void Button1_Click(object sender, EventArgs e) {
       //assume you opened the db

 SqlCommand cmd=new SqlCommand();
  cmd.CommandText="select * from users where username=@name and password=@pass";
  cmd.Connection=conn;
  cmd.Parameters.AddWithValue("name",user.Text);
  cmd.Parameters.AddWithValue("pass",pass.Text);
 SqlDataReader dr=cmd.ExecuteReader();
 if (dr.HasRows)
 {
     FormsAuthentication.SetAuthCookie(user.Text, true);
     FormsAuthentication.RedirectFromLoginPage(user.Text, true);
 }
else labelerror.Text="Incorrect name or pass";
}

Теперь используйте ваше имя таблицы, и я надеюсь, что вы знаете, что делать. Помните, что у вас есть только одна защищенная веб-форма karbar.aspx.

0 голосов
/ 22 января 2012

Две вещи:

  1. Как уже упоминалось в комментариях, убедитесь, что имя подключения news , not in, но in <connectionStrings> element.

  2. Ваша база данных должна иметь ряд специальных talbes + views + SP аутентификации форм, запустив aspnet_regsql.exe .Эти таблицы администрируются внутренними поставщиками аутентификации / членства / роли ASP.NET.

...