Yosua Michael Ответов: 2

Как использовать значение текстового поля на другой странице ASP.NET


У меня есть код прямо здесь:
&ЛТ;%@ страницы язык="в C#" AutoEventWireup значение="истинный" %&ГТ;
&низкотемпературный;%@ Import Namespace= "FormsAuth" % & gt;

<%@ Page language="c#" AutoEventWireup="true" %>
<%@ Import Namespace="FormsAuth" %>

<html>
<head>
    <title>Login</title>
</head>
  <body  align="center">
    <form id="Login" method="post" runat="server">
    <table cellpadding="1" cellspacing="1" style="background-color: #E0E0E0; border: 1px solid #727272"  align="center">
      <h1>PT. Packet Systems Indonesia <br/> Login Form</h1>
      <p>Please enter your account in this form!</p>
      <tr>
        <td>
            <asp:Label ID="Label1" Runat=server >Domain:</asp:Label>
      
        </td>
        <td>
            <asp:TextBox ID="txtDomain" Runat=server ></asp:TextBox>
        </td>
      </tr>
      <tr>
        <td>
            <asp:Label ID="Label2" Runat=server >Username:</asp:Label>
        </td>
        <td>
            <asp:TextBox ID=txtUsername Runat=server ></asp:TextBox>
        </td>
      </tr>
      <tr>
        <td>
            <asp:Label ID="Label3" Runat=server >Password:</asp:Label>
        </td>
        <td>
            <asp:TextBox ID="txtPassword" Runat=server TextMode=Password></asp:TextBox>
        </td>
      </tr>
      <tr>
        <td colspan="2">
            <asp:CheckBox ID=chkPersist Runat=server Text="Persist Cookie" />
        </td>
      </tr>
      <tr>
        <td colspan="2" align="center">
            <asp:Button ID="btnLogin" Runat=server Text="Login" OnClick="Login_Click"></asp:Button>
        </td>
      </tr>
      <tr>
        <td colspan="2">
            <asp:Label ID="errorLabel" Runat=server ForeColor=#ff3300></asp:Label>
        </td>
      </tr>
    </table>
    </form>
  </body>
</html>
<script runat=server>
void Login_Click(object sender, EventArgs e)
{
  string adPath = "LDAP://erpad-tbs-1.packet-systems.com"; //Path to your LDAP directory server
  LdapAuthentication adAuth = new LdapAuthentication(adPath);
  try
  {
    if(true == adAuth.IsAuthenticated(txtDomain.Text, txtUsername.Text, txtPassword.Text))
    {
      //string groups = adAuth.GetGroups();
      string groups = txtUsername.Text;
      //Create the ticket, and add the groups.
      bool isCookiePersistent = chkPersist.Checked;
      FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, 
                txtUsername.Text,DateTime.Now, DateTime.Now.AddMinutes(60), isCookiePersistent, groups);

      //Encrypt the ticket.
      string encryptedTicket = FormsAuthentication.Encrypt(authTicket);

      //Create a cookie, and then add the encrypted ticket to the cookie as data.
      HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);

      if(true == isCookiePersistent)
      authCookie.Expires = authTicket.Expiration;

      //Add the cookie to the outgoing cookies collection.
      Response.Cookies.Add(authCookie);

      //You can redirect now.
      Response.Redirect(FormsAuthentication.GetRedirectUrl(txtUsername.Text, false));
    }
    else
    {
      errorLabel.Text = "Authentication did not succeed. Check user name and password.";
    }
  }
  catch(Exception ex)
  {
    errorLabel.Text = "Error authenticating. " + ex.Message;
  }
}
</script>

в этом коде у меня есть текстовое поле домен, имя пользователя и пароль. И они будут аутентифицированы в ldap.

вот мой код ldapauthentication. cs:
using System;
using System.Text;
using System.Collections;
using System.DirectoryServices;
using System.DirectoryServices.AccountManagement;
using System.DirectoryServices.ActiveDirectory;
 
namespace FormsAuth
{
    public class LdapAuthentication
    {
        private string _path;
        private string _filterAttribute;
        
        public LdapAuthentication(string path)
        {
            _path = path;
        }
 
        public bool IsAuthenticated(string domain, string username, string pwd)
        {
            string _domain = domain;
            string domainAndUsername = domain + @"\" + username;
            DirectoryEntry entry = new DirectoryEntry(_path, domainAndUsername, pwd);
 
            try
            {
                //Bind to the native AdsObject to force authentication.
                object obj = entry.NativeObject;
 
                DirectorySearcher search = new DirectorySearcher(entry);
 
                search.Filter = "(SAMAccountName=" + username + ")";
                search.PropertiesToLoad.Add("cn");
                SearchResult result = search.FindOne();
 
                if (null == result)
                {
                    return false;
                }
 
                //Update the new path to the user in the directory.
                _path = result.Path;
                _filterAttribute = (string)result.Properties["cn"][0];
            }
            catch (Exception ex)
            {
                throw new Exception("Error authenticating user. " + ex.Message);
            }
 
            return true;
        }
 
        public string GetGroups()
        {
            DirectorySearcher search = new DirectorySearcher(_path);
            search.Filter = "(cn=" + _filterAttribute + ")";
            search.PropertiesToLoad.Add("memberOf");
            StringBuilder groupNames = new StringBuilder();
 
            try
            {
                SearchResult result = search.FindOne();
                int propertyCount = result.Properties["memberOf"].Count;
                string dn;
                int equalsIndex, commaIndex;
 
                for (int propertyCounter = 0; propertyCounter < propertyCount; propertyCounter++)
                {
                    dn = (string)result.Properties["memberOf"][propertyCounter];
                    equalsIndex = dn.IndexOf("=", 1);
                    commaIndex = dn.IndexOf(",", 1);
                    if (-1 == equalsIndex)
                    {
                        return null;
                    }
                    groupNames.Append(dn.Substring((equalsIndex + 1), (commaIndex - equalsIndex) - 1));
                    groupNames.Append("|");
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Error obtaining group names. " + ex.Message);
            }
            return groupNames.ToString();
        }
 
        
    }
}

как я могу использовать значение формы входа в систему для изменения формы пароля?
я хочу сменить пароль.

Что я уже пробовал:

Я пытался сделать новые параметры, но я все еще путаю.
Я просто хочу взять значение старого пароля и изменить его на новый пароль.
кто-нибудь может мне помочь?

Sinisa Hajnal

Простой ответ: Вы не можете :) исходное текстовое поле является элементом управления на странице входа в систему и как таковое недоступно ни на одной другой странице.

То, что вы можете сделать, это а) попросить пользователя ввести его или б) ввести имя пользователя в сеанс, URL-адрес или использовать какой-либо другой метод передачи данных между страницами или в) на основе токена входа (однако вы сохраняете вход пользователя в систему) запросить информацию о пользователе в базе данных.

2 Ответов

Рейтинг:
16

Vincent Maverick Durano

Вы можете сохранить старый пароль в сеансе. Другой вариант - использовать поставщика профилей или, возможно, создать пользовательский класс, содержащий необходимую вам информацию после входа в систему. Вы также можете заглянуть в ASP.NET идентификация для добавления пользовательских утверждений. Но я бы предпочел, чтобы пользователь ввел свой старый пароль для изменения нового пароля по соображениям безопасности.


Yosua Michael

да, я это делаю, пользователь будет вводить свой старый пароль.
теперь проблема в том, что я не могу использовать старый пароль.
я предполагаю, что мой код не подключался к ldap.
я все еще путаю, какой код fungsion подключить Мой changepassword к ldap, чтобы я мог взять старый пароль.
спасибо

Vincent Maverick Durano

Я бы посоветовал вам отладить свой код, установить точку останова и войти в нее, чтобы вы поняли, что пошло не так. Кроме того, вы можете взглянуть на эту статью: http://www.codeproject.com/Articles/18102/Howto-Almost-Everything-In-Active-Directory-via-C#40a

Рейтинг:
0

Member 12152643

я предлагаю вам, чтобы вы попросили старый пароль изменить пароль
с другой стороны, если вы просто хотите изменить его с помощью входа в систему, вам нужно использовать раздел
в основном раздел это передача данных из одной формы в другую и вы можете вызвать сеанс в любом месте

Чтобы добавить значение в переменную сеанса

Session.Add("Programe",  ddlProgamme.SelectedValue);

"Программа" это имя переменной сеанса
это тип данных по умолчанию строка

Чтобы получить значение из переменной сеанса
this.program = (string)(Session["Programe"]);