2014-11-04 4 views
3

В настоящее время у меня есть метод в моем BaseController и в каждом методе контроллера, что мне нужно, чтобы пользователь был аутентифицирован я остался с всегда называя этот кусок кода:Лучше реализация (общий) Auth

user, err := c.getUser() 
if err != nil { 
     return c.Redirect(UserController.Login) 
} 

Который только проверяет, является ли

revel.InterceptMethod((*UserController).CheckUser, revel.BEFORE) 

(в init.go) добавил действительный пользователь .RenderArgs["user"].

В любом случае я могу перенести это перенаправление на страницу входа в систему, включая. проверка подлинности в методе фильтра/перехвата, поэтому мне не нужно повторять вышеуказанный код 10 раз? (Я разработал этот код вокруг revel v0.9 ~ 0.10)

Одним из решений, которое я придумал, будет выписывать модуль/приложение, аналогичное новому модулю csrf.

EDIT 4.11.2015: Этот вопрос был размещен некоторое время назад, пожалуйста, проверьте назад официальный Revel documentation как пирушки претерпели некоторое развитие

ответ

2

Только не позволяйте запросы к контроллерам, если при аутентификации не имеет должным образом сделано. Для этого вам необходимо реализовать Filter. Это означает что-то вроде

init.go:

revel.Filters = []revel.Filter{ 
    SessionFilter, // Preferably a safe implementation that isn't plaintext cookies etc 
    mypackage.Authenticator 
} 

mypackage.go:

package mypackage 

func Authenticator(c *revel.Controller, fc []revel.Filter) { 
// If authentication found (from session), pass to next Filter in stack 
// If not, redirect to your authentication UI, and pass 
// Or handle other parts of authentication requests... 
// If authentication succeeded, save it to session 

// Otherwise just drop the request (probably log?) 
} 

Специфика полностью зависят от того, какой аутентификации вы настраиваете. Вот один SSO implementation для справки.

Смежные вопросы