Play Framework — это отличный инструмент для разработки веб-приложений на языке Java и Scala. Одним из важных аспектов любого веб-приложения является авторизация пользователей. В этой статье мы рассмотрим, как можно реализовать авторизацию в приложениях, разрабатываемых на Play Framework.
Для начала нам понадобится добавить зависимость в файл build.sbt:
«`scala
libraryDependencies += com.typesafe.play %% play-slick % 3.0.3
«`
После этого нам нужно создать модель пользователя. Для этого мы можем создать класс User:
«`scala
case class User(id: Option[Long], email: String, password: String)
«`
Далее создадим DAO для работы с пользователями. Мы можем использовать Slick для работы с базой данных. Создадим объект UserDao:
«`scala
class UserDao @Inject()(protected val dbConfigProvider: DatabaseConfigProvider)(implicit ec: ExecutionContext) extends HasDatabaseConfigProvider[JdbcProfile] {
import profile.api._
private val Users = TableQuery[UsersTable]
def getUserByEmail(email: String): Future[Option[User]] = db.run(Users.filter(_.email === email).result.headOption)
def createUser(user: User): Future[User] = db.run(Users returning Users.map(_.id) into ((user, id) => user.copy(id = Some(id))) += user)
private class UsersTable(tag: Tag) extends Table[User](tag, users) {
def id = column[Long](id, O.PrimaryKey, O.AutoInc)
def email = column[String](email)
def password = column[String](password)
def * = (id.?, email, password) <> (User.tupled, User.unapply)
}
}
«`
Теперь мы можем создать контроллер для работы с пользователями. Создадим класс AuthController:
«`scala
class AuthController @Inject()(cc: ControllerComponents, userDao: UserDao) extends AbstractController(cc) {
def register = Action.async(parse.json) { implicit request =>
request.body.validate[User].fold(
errors => Future.successful(BadRequest(Json.obj(message -> JsError.toJson(errors))),
user => userDao.createUser(user).map(user => Ok(Json.toJson(user)))
)
}
def login = Action.async(parse.json) { implicit request =>
request.body.validate[User].fold(
errors => Future.successful(BadRequest(Json.obj(message -> JsError.toJson(errors))),
user => userDao.getUserByEmail(user.email).flatMap {
case Some(dbUser) if dbUser.password == user.password => Future.successful(Ok(Json.toJson(dbUser)))
case None => Future.successful(Unauthorized(Json.obj(message -> Invalid email or password))
}
)
}
}
«`
Теперь мы можем добавить роуты для наших методов в файле routes:
«`
POST /register controllers.AuthController.register
POST /login controllers.AuthController.login
«`
Теперь у нас есть простейшая система авторизации в нашем веб-приложении, разработанном на Play Framework. Конечно, это только начало, и в реальном приложении потребуется доработать механизм авторизации, добавить защиту от атак и многое другое. Но этот пример дает нам базовое представление о том, как можно реализовать авторизацию в приложениях на Play Framework.
© KiberSec.ru – 07.04.2025, обновлено 07.04.2025
Перепечатка материалов сайта возможна только с разрешения администрации KiberSec.ru.