GoのRevelでcookieを発行したログイン機能を作っています。
Controllerのメソッドで、CookieのKeyの値がなければ、ログインページにリダイレクトする処理を以下のように書いているのですが、
この処理を各ページのメソッド内で毎回書くのは冗長なので、関数として呼び出すようにしたいのですが、どのように書いたら良いのでしょうか?
Go
1func (c App) Index() revel.Result { 2 3 name := c.Session["userName"] 4 if name == nil { 5 return c.Redirect(App.Login) 6 } 7 8 return c.Render() 9}
Cookieの発行
Go
1func (c App) Auth(name string, password string) revel.Result { 2 // 省略 3 user := []models.Users{} 4 DB.Where("name = ?", name).First(&user) 5 6 if len(user) != 0 { 7 hashPassword := getMD5Hash(password) 8 if user[0].Password == hashPassword { 9 c.Session["userName"] = name 10 c.Session.SetNoExpiration() 11 c.Flash.Success("Welcome, " + name) 12 return c.Redirect(App.Index) 13 } 14 } 15 16 c.Flash.Error("Login failed") 17 return c.Redirect(App.Login) 18}
試したこと
以下のように書いて、メソッド内でLogined()を呼び出そうとすると undefined: Logined とエラーになってしまいます。
Go
1func (c App) Logined() revel.Result{ 2 name := c.Session["userName"] 3 fmt.Println(name) 4 5 if name == nil { 6 return c.Redirect(App.Login) 7 } 8 return nil 9}
Go
1func (c App) Index() revel.Result { 2 3 Logined() 4 5 return c.Render() 6}
あなたの回答
tips
プレビュー