2014-11-07 2 views

ответ

1

Я сделал это в Play Framework проекта с использованием Secured признака:

package controllers 

import play.api.mvc._ 

trait Secured { 

    /** 
    * Retrieve the connected user login. 
    */ 
    private def username(request: RequestHeader) = request.session.get("login") 

    /** 
    * Redirect to login if the user in not authorized. 
    */ 
    private def onUnauthorized(request: RequestHeader) = Results.Redirect(routes.Application.login) 

    /** 
    * Action for authenticated users. 
    */ 
    def IsAuthenticated(f: => String => Request[AnyContent] => Result) = Security.Authenticated(username, onUnauthorized) { 
    user => 
     Action(request => f(user)(request)) 
    } 
} 

Application выше контроллер аутентификации:

package controllers 

import play.api.mvc._ 
import play.api.data._ 
import play.api.data.Forms._ 
import models._ 
import views._ 

object Application extends Controller { 

    val loginForm = Form(
    tuple(
     "login" -> text, 
     "password" -> text 
    ) verifying("Invalid user or password", result => result match { 
     case (login, password) => User.authenticate(login, password).isDefined 
    }) 
) 

    /** 
    * Login page. 
    */ 
    def login = Action { implicit request => 
    Ok(html.login(loginForm)) 
    } 

    /** 
    * Handle login form submission. 
    */ 
    def authenticate = Action { implicit request => 
    loginForm.bindFromRequest.fold(
     formWithErrors => BadRequest(html.login(formWithErrors)), 
     user => Redirect(routes.Home.index()).withSession("login" -> user._1) 
    ) 
    } 

    /** 
    * Logout and clean the session. 
    */ 
    def logout = Action { 
    Redirect(routes.Home.index()).withNewSession.flashing(
     "success" -> "You've been logged out" 
    ) 
    } 
} 

Затем пример защищенного контроллера страницы:

package controllers 

import play.api.mvc._ 
import models._ 
import views._ 
import play.api.Logger 

object MyPage extends Controller with Secured { 

    def index() = IsAuthenticated { username => implicit request => 
    Ok(
     html.mypage(
     User.findByUsername(username) 
    ) 
    ) 
    } 
} 

User - дело класс, который просто загружает данные из БД с помощью анорма. Наконец, связанная часть routes:

# Authentication 
GET   /login       controllers.Application.login() 
POST  /login       controllers.Application.authenticate() 
GET   /logout       controllers.Application.logout() 

# MyPage 
GET   /mypage       controllers.MyPage.index() 

Есть два HTML шаблоны, указанные выше: login.scala.html и mypage.scala.html, но я не показывать их здесь.

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