瀏覽代碼

Redirect to original URL after login

master
Simon Ser 4 年之前
父節點
當前提交
24718f1ac4
沒有發現已知的金鑰在資料庫的簽署中 GPG 金鑰 ID: FDE7BE0E88F5E48
共有 2 個檔案被更改,包括 23 行新增7 行删除
  1. +3
    -0
      plugins/base/routes.go
  2. +20
    -7
      server.go

+ 3
- 0
plugins/base/routes.go 查看文件

@@ -141,6 +141,9 @@ func handleLogin(ctx *koushin.Context) error {
}
ctx.SetSession(s)

if path := ctx.QueryParam("next"); path != "" && path[0] == '/' && path != "/login" {
return ctx.Redirect(http.StatusFound, path)
}
return ctx.Redirect(http.StatusFound, "/mailbox/INBOX")
}



+ 20
- 7
server.go 查看文件

@@ -178,6 +178,24 @@ func isPublic(path string) bool {
return path == "/login" || strings.HasPrefix(path, "/themes/")
}

func redirectToLogin(ctx *Context) error {
path := ctx.Request().URL.Path
to := "/login"
if path != "/" && path != "/login" {
to += "?next=" + url.QueryEscape(ctx.Request().URL.String())
}
return ctx.Redirect(http.StatusFound, to)
}

func handleUnauthenticated(next echo.HandlerFunc, ctx *Context) error {
// Require auth for all requests except /login and assets
if isPublic(ctx.Request().URL.Path) {
return next(ctx)
} else {
return redirectToLogin(ctx)
}
}

type Options struct {
IMAPURL, SMTPURL string
Theme string
@@ -228,12 +246,7 @@ func New(e *echo.Echo, options *Options) (*Server, error) {

cookie, err := ctx.Cookie(cookieName)
if err == http.ErrNoCookie {
// Require auth for all pages except /login
if isPublic(ctx.Path()) {
return next(ctx)
} else {
return ctx.Redirect(http.StatusFound, "/login")
}
return handleUnauthenticated(next, ctx)
} else if err != nil {
return err
}
@@ -241,7 +254,7 @@ func New(e *echo.Echo, options *Options) (*Server, error) {
ctx.Session, err = ctx.Server.Sessions.get(cookie.Value)
if err == errSessionExpired {
ctx.SetSession(nil)
return ctx.Redirect(http.StatusFound, "/login")
return handleUnauthenticated(next, ctx)
} else if err != nil {
return err
}


Loading…
取消
儲存