Skip to content
This repository has been archived by the owner on Sep 11, 2020. It is now read-only.

create login and register api #27

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions .github/workflows/BuildTest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,10 @@ jobs:
name: tryToBuild
runs-on: ubuntu-latest
steps:
- name: Set up Go 1.13.x
- name: Set up Go 1.13.5
uses: actions/setup-go@v1
with:
go-version: 1.13.x
id: go
go-version: 1.13.5

- name: Check out code into the Go module directory
uses: actions/checkout@v1
Expand Down
2 changes: 1 addition & 1 deletion database/database.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@ package database
import "github.com/go-pg/pg/v9"

func New(options *pg.Options) *pg.DB {
migration()
migration() //第一次連接先migration確保所有table都存在
return pg.Connect(options)
}
20 changes: 20 additions & 0 deletions database/user.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package database

import (
"fmt"
"github.com/NPC-GO/MaJaJalist-backend/model"
"github.com/go-pg/pg/v9"
)

type User struct {
DB *pg.DB
}

func (u *User) GetUserByField(field, value string) (*model.User, error) {
var user model.User
err := u.DB.Model(&user).Where(fmt.Sprintf("%v = ?", field), value).First()
return &user, err
}
func (u *User) GetUserByToken(token string) (*model.User, error) {
return u.GetUserByField("token", token)
}
2 changes: 2 additions & 0 deletions gqlgen.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,5 +45,7 @@ models:
model: github.com/NPC-GO/MaJaJalist-backend/model.TodoConfig
ChangeTodoConfigValueInput:
model: github.com/NPC-GO/MaJaJalist-backend/model.ChangeTodoConfigValueInput
TodoAuthorLayout:
model: github.com/NPC-GO/MaJaJalist-backend/model.TodoAuthorLayout


25 changes: 25 additions & 0 deletions middleware/auth.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package middleware

import (
"github.com/NPC-GO/MaJaJalist-backend/database"
"net/http"
)

func BeforeLoginAuth(userDatabaseCtrl database.User) func(http.Handler) http.Handler {
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
session, err := r.Cookie("session")
if err == nil {
if _, err := userDatabaseCtrl.GetUserByToken(session.Value); err == nil {
if r.Method == http.MethodGet {
http.Redirect(w, r, "https://"+r.URL.Host, 302)
return
}
http.Error(w, "you has login", 403)
return
}
}
next.ServeHTTP(w, r)
})
}
}
7 changes: 0 additions & 7 deletions model/model_gqlgen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions router/handler/handler.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
package handler

import (
"github.com/NPC-GO/MaJaJalist-backend/database"
"net/http"
)

func HtmlHandler(w http.ResponseWriter, r *http.Request) {
http.ServeFile(w, r, "./dist/index.html")
}
func Login(userDatabaseCtrl database.User) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {

}
} //post /login 的handler
14 changes: 9 additions & 5 deletions router/router.go
Original file line number Diff line number Diff line change
@@ -1,19 +1,23 @@
package router

import (
"github.com/NPC-GO/MaJaJalist-backend/database"
"github.com/NPC-GO/MaJaJalist-backend/middleware"
"github.com/NPC-GO/MaJaJalist-backend/router/handler"
"github.com/go-chi/chi"
"github.com/go-chi/chi/middleware"
chiMiddleware "github.com/go-chi/chi/middleware"
"net/http"
)

func InitRouter() chi.Router {
func InitRouter(userDatabaseCtrl database.User) chi.Router {
router := chi.NewRouter()
router.Use(
middleware.Logger,
middleware.Recoverer,
chiMiddleware.Logger,
chiMiddleware.Recoverer,
)
router.Get("/*", http.StripPrefix("/", http.FileServer(http.Dir("dist"))).ServeHTTP)
router.With(middleware.BeforeLoginAuth(userDatabaseCtrl)).Post("/login", handler.Login(userDatabaseCtrl))
//用middleware擋住已經登錄的
router.Get("/*", http.StripPrefix("/", http.FileServer(http.Dir("dist"))).ServeHTTP) //用來提供js與css檔案
router.Get("/", handler.HtmlHandler)
return router
}
9 changes: 5 additions & 4 deletions server.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,13 @@ func main() {
Password: "postgres",
Database: "MaJaJalist",
Addr: "database:5432",
})
defer DB.Close()
server := router.InitRouter()
}) //連接到database的設定
defer DB.Close() //在最後斷開連接
userDatabaseCtrl := database.User{DB: DB}
server := router.InitRouter(userDatabaseCtrl) //把db傳進router就不用每次要使用db都連接一次
err := http.ListenAndServeTLS(":443", "./certs/server.crt", "./certs/server.key", server)
if err != nil {
fmt.Println(err)
http.ListenAndServe(":80", server)
http.ListenAndServe(":80", server) //無法使用https則用http
}
}