소스 검색

first commit

litpooh 3 년 전
부모
커밋
32ea85e585
4개의 변경된 파일57개의 추가작업 그리고 12개의 파일을 삭제
  1. 2 2
      files/index.html
  2. 5 0
      go.mod
  3. 4 0
      go.sum
  4. 46 10
      main.go

+ 2 - 2
files/index.html

@@ -16,8 +16,8 @@
         url: "/checklogin",
         success: function(value){
             var response = JSON.parse(value)
-            if (response.loggedIn == true){
-                 alert("Yes: User has logged in");
+            if (response.LoggedIn == true){
+                alert("Yes: User has logged in");
             }else{
                 alert("No: User has not logged in yet");
             }

+ 5 - 0
go.mod

@@ -0,0 +1,5 @@
+module login_system_session
+
+go 1.16
+
+require github.com/gorilla/sessions v1.2.1

+ 4 - 0
go.sum

@@ -0,0 +1,4 @@
+github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ=
+github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4=
+github.com/gorilla/sessions v1.2.1 h1:DHd3rPN5lE3Ts3D8rKkQ8x/0kqfeNmBAaiSi+o7FsgI=
+github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM=

+ 46 - 10
main.go

@@ -1,19 +1,18 @@
 package main
 
 import (
+	"encoding/json"
 	"flag"
 	"log"
 	"net/http"
+
+	"github.com/gorilla/sessions"
 )
 
-var loggedIn bool = false
+var store = sessions.NewCookieStore([]byte("secret-key"))
 
-func checklogin() []byte {
-	if loggedIn == true {
-		return []byte(`{"loggedIn": true}`)
-	} else {
-		return []byte(`{"loggedIn": false}`)
-	}
+type Status struct {
+	LoggedIn bool
 }
 
 func loginHandler(rw http.ResponseWriter, req *http.Request) {
@@ -22,8 +21,20 @@ func loginHandler(rw http.ResponseWriter, req *http.Request) {
 		log.Println("The typed password is:" + password)
 		if password == "admin" {
 			log.Println("Password is correct")
+
+			session, err := store.Get(req, "session-name")
+			if err != nil {
+				http.Error(rw, err.Error(), http.StatusInternalServerError)
+				return
+			}
+			session.Values["auth"] = true
+			err = session.Save(req, rw)
+			if err != nil {
+				http.Error(rw, err.Error(), http.StatusInternalServerError)
+				return
+			}
+
 			rw.Write([]byte("true"))
-			loggedIn = true
 			log.Println("Logged in")
 		} else {
 			log.Println("WRONG password!!")
@@ -32,14 +43,39 @@ func loginHandler(rw http.ResponseWriter, req *http.Request) {
 }
 
 func logoutHandler(rw http.ResponseWriter, req *http.Request) {
-	loggedIn = false
+	session, err := store.Get(req, "session-name")
+	if err != nil {
+		http.Error(rw, err.Error(), http.StatusInternalServerError)
+		return
+	}
+	session.Values["auth"] = nil
+	err = session.Save(req, rw)
+	if err != nil {
+		http.Error(rw, err.Error(), http.StatusInternalServerError)
+		return
+	}
+
 	http.Redirect(rw, req, "/login.html", http.StatusSeeOther)
 	log.Println("Logged out successfully")
 }
 
 func checkloginHandler(rw http.ResponseWriter, req *http.Request) {
-	rw.Write(checklogin())
 	log.Println("Check button is clicked")
+	session, err := store.Get(req, "session-name")
+	if err != nil {
+		http.Error(rw, err.Error(), http.StatusInternalServerError)
+		return
+	}
+	var result Status
+	if session.Values["auth"] == true {
+		log.Println("Checked that auth = true")
+		result.LoggedIn = true
+	} else {
+		log.Println("Checked that auth = false")
+		result.LoggedIn = false
+	}
+	send_message, _ := json.Marshal(result)
+	rw.Write(send_message)
 }
 
 func main() {