1. WebUser
- Web.config - 폼 인증 방식으로 변경
<authentication mode="Forms">
<forms loginUrl="~/User/Login.aspx"></forms>
</authentication>
2. DB
Server : (local)\SQLExpress
Database : WebUser
Uid : WebUser
Pwd : Pa$$w0rd
Web.config : <connectionString />기록
Table : Users
--[0] Users 테이블생성
Create Table dbo.Users
(
UID Int Identity(1, 1) Primary Key Not Null,
UserID VarChar(25) Not Null,
[Password] VarChar(20) Not Null
-- 필요한항목이있으면, 언제든추가
)
Go
--[1] 입력예시문
Insert Into Users Values('admin', '1234')
Go
--[1] 입력저장프로시저
Create Proc dbo.WriteUsers
@UserID VarChar(25),
@Password VarChar(20)
As
Insert Into Users Values(@UserID, @Password)
Go
Exec WriteUsers '구하라', '1234'
Go
--[2] 출력저장프로시저
Create Proc dbo.ListUsers
As
Select * From Users Order By UID Desc
Go
Exec ListUsers
Go
--[3] 상세저장프로시저
Create Proc dbo.ViewUsers
@UID Int
As
Select * From Users Where UID = @UID
Go
Exec ViewUsers 1
Go
--[4] 수정저장프로시저
Create Proc dbo.ModifyUsers
@UserID VarChar(25),
@Password VarChar(20),
@UID Int
As
Update Users Set UserID = @UserID, Password = @Password Where UID = @UID
Go
Exec ModifyUsers '하라', '1111', 2
Go
--[5] 삭제저장프로시저
Create Proc dbo.DeleteUsers
@UID Int
As
Delete From Users Where UID = @UID
Go
Exec DeleteUsers 2
--[6] 검색저장프로시저
Create Proc dbo.SearchUsers
@SearchText VarChar(100)
As
Declare @SqlQuery VarChar(300)
Set @SqlQuery = '
Select * From Users Where UserID Like ''%' + @SearchText + '%''
'
Exec(@SqlQuery)
Go
3. 웹 폼
Default.aspx : 메인
Login.aspx : 로그인
Register.aspx : 회원가입
UserInfor.aspx : 회원정보보기 및 수정 그리고 탈퇴 등 기능 : 인증된 사용자만 접근 가능
Welcome.aspx : 로그인 환영 페이지 : 인증된 사용자만 접근 가능
~/Admin/Default.aspx : 관리 사용자만 접근 가능
[User/Default.aspx]의 <div>태그 내에 작성한 코드
<h3>메인</h3>
<asp:LoginView ID="LoginView1" runat="server">
<AnonymousTemplate>
<asp:LoginStatus ID="LoginStatus1" runat="server" />
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/User/Register.aspx">회원가입</asp:HyperLink>
</AnonymousTemplate>
<LoggedInTemplate>
<asp:LoginStatus ID="LoginStatus2" runat="server" />
<asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl="~/User/UserInfor.aspx" >
<asp:LoginName ID="LoginName1" runat="server" />
</asp:HyperLink>
</LoggedInTemplate>
</asp:LoginView>
-------------------------------------------------------------------------------------
[User/Login.aspx]의 <div>태그 내에 작성한 코드
로그인<br />
아이디 :<asp:Textbox runat="server" ID="txtUserID"></asp:Textbox><br />
암호 :<asp:TextBox runat="server" ID="txtPassword" TextMode="Password"></asp:TextBox><br /><br />
<asp:LinkButton Text="로그인" runat="server" ID="btnLogin" onclick="btnLogin_Click"></asp:LinkButton>
<asp:requiredfieldvalidator errormessage="아이디를 입력하시오." ControlToValidate="txtUserID" runat="server" Display="None" SetFocusOnError="true"></asp:requiredfieldvalidator>
<asp:RequiredFieldValidator ErrorMessage="암호를 입력하시오." ControlToValidate="txtPassword" runat="server" Display="None" SetFocusOnError="true"></asp:RequiredFieldValidator>
<asp:ValidationSummary runat="server" ShowMessageBox="true" ShowSummary="false" />
-------------------------------------------------------------------------------------
[User/Login.aspx.cs]에 작성한 코드부분
protected void btnLogin_Click(object sender, EventArgs e)
{
// 아이디와 암호가 맞는 데이터가 있다면
if (IsCorrectUser(txtUserID.Text, txtPassword.Text))
{
//[3] 인증 부여
FormsAuthentication.RedirectFromLoginPage(txtUserID.Text, false); // 인증가 동시에 팅겨져 나온 페이지로 이동
//FormsAuthentication.SetAuthCookie(txtUserID.Text, false); // 인증 쿠키값 부여하고
//Response.Redirect("Default.aspx"); // 이동
}
else
{
Page.ClientScript.RegisterStartupScript(this.GetType(), "showMsg", "<script>alert('잘못된 사용자입니다.');</script>");
}
}
/// <summary>
/// 아이디와 암호가 맞으면 참, 그렇지 않으면 거짓을 반환
/// </summary>
private bool IsCorrectUser(string userId, string password)
{
bool result = false;
// 커넥션
SqlConnection con = new SqlConnection();
con.ConnectionString = WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
con.Open();
// 커멘드
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "Select * From Users Where UserID = @UserID And Password = @Password";
cmd.CommandType = CommandType.Text;
// 파라미터 추가
cmd.Parameters.AddWithValue("@UserID", txtUserID.Text);
cmd.Parameters.AddWithValue("@Password", txtPassword.Text);
// 읽어오기
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
result = true; // 아이디와 암호가 맞는 데이터가 있구나...
}
dr.Close();
con.Close();
return result;
}
-------------------------------------------------------------------------------------
[User/Register.aspx]의 <div>태그 내에 작성한 코드
회원가입
<br />
<br />
아이디 :<asp:TextBox ID="txtUserID" runat="server"></asp:TextBox>
<br />
암호 :<asp:TextBox ID="txtPassword" runat="server" TextMode="Password"></asp:TextBox>
<br />
<br />
<asp:LinkButton ID="btnRegister" runat="server" onclick="btnRegister_Click">회원가입</asp:LinkButton>
-------------------------------------------------------------------------------------
[User/Register.aspx.cs]에 작성한 코드부분
protected void btnRegister_Click(object sender, EventArgs e)
{
// 커넥션
SqlConnection con = new SqlConnection();
con.ConnectionString = WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
// 커멘드
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "WriteUsers";
cmd.CommandType = CommandType.StoredProcedure;
// 파라미터 추가
cmd.Parameters.AddWithValue("@UserID", txtUserID.Text);
cmd.Parameters.AddWithValue("@Password", txtPassword.Text);
// 실행
con.Open();
cmd.ExecuteNonQuery();
con.Close();
// 메시지 박스 출력 후 기본 페이지로 이동
string strJs = "<script>alert('가입완료');location.href='Default.aspx';</script>";
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "goDefault", strJs);
}
-------------------------------------------------------------------------------------
[User/UserInfor.aspx]의 <div>태그 내에 작성한 코드 및 [User/UserInfor.aspx.cs]에 작성한 코드부분은 여기서는 없다.(아무런 코드도 작성하지 않았다.)
-------------------------------------------------------------------------------------
[User/Welcome.aspx]에 작성한 소스코드
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Welcome.aspx.cs" Inherits="User_Welcome" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="lblName" runat="server" Text=""></asp:Label>님
반갑습니다.
</div>
</form>
</body>
</html>
-------------------------------------------------------------------------------------
[User/Welcome.aspx.cs]에 작성한 소스코드
using System;
public partial class User_Welcome : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//[1] 인증 여부 확인 : 로그인했으면 참, 그렇지 않으면 거짓을 반환
if (Page.User.Identity.IsAuthenticated)
{
//[2] 인증 이름 출력
lblName.Text = Page.User.Identity.Name; // web.config에 셋팅했기 때문에 if문 안묶어도 됨
}
else
{
Response.Redirect("Login.aspx"); // 로그인 페이지로 이동
}
}
}
-------------------------------------------------------------------------------------
[Web.config]에 작성한 소스코드
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings/>
<connectionStrings/>
<system.web>
</system.web>
<location path="UserInfor.aspx">
<system.web>
<!-- 허가 -->
<authorization>
<!-- 인증되지 않은 사용자(?)를 거부 -->
<deny users="?"/>
</authorization>
</system.web>
</location>
<location path="Welcome.aspx">
<system.web>
<!-- 허가 -->
<authorization>
<!-- 인증되지 않은 사용자(?)를 거부 -->
<deny users="?"/>
</authorization>
</system.web>
</location>
</configuration>
-------------------------------------------------------------------------------------
[User/Admin/Web.config]에 작성한 소스코드
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings/>
<connectionStrings/>
<system.web>
<authorization>
<!-- Admin 폴더는 박상혁만 접근 가능 -->
<allow users="박상혁"/>
<deny users="*"></deny>
</authorization>
</system.web>
</configuration>
-------------------------------------------------------------------------------------
* 인증 방법 2가지
1.따로따로 파일에 대한 인증
2.폴더 전체에 대한 인증
폴더 전체에 인증하려면 system.web안에 authrization에 걸고
특정 파일에 인증하려면 location path로 파일 지정
Admin폴더에 특정 사용자만 들어갈 수 있게 하려면
Admin폴더에 새항목 추가 web.config
여기서는 Admin폴더 전체에 대해 인증 걸어야 하기 때문에
system.web안에 authorization에 지정
-------------------------------------------------------------------------------------
4. 주요 명령어
- 로그인 처리
System.Web.Security.FormsAuthentication.SetAuthCookie()
System.Web.Security.FormsAuthentication.RedirectFromLoginPage()
- 로그인 확인
Page.User.Identity.IsAuthenticated
- 로그인 이름
Page.User.Identity.Name
- 로그아웃
FormsAuthentication.Signout()