1

Lift アプリケーションの認証ルートを作成したいと考えています。

  1. たとえば、ルートを作成しますwww.myapp.com/user/login
  2. Lift フォーム/テンプレートを使用していません。フォームは JS でレンダリングされます。
  3. 電子メールとパスワードを使用して投稿リクエストを送信します。
  4. その POST リクエストが受信されたときに Lift 認証を呼び出します。
  5. メソッドを使用しUsers.login(email, password)て資格情報を検証します。

Q: 経由で受信した資格情報を認証するよう Lift に指示するにはどうすればよい/user/loginですか?

4

2 に答える 2

1

これは単純すぎますが、このような方法で投稿先の URL を作成できます。JSON 抽出はあまり安全ではありませんが、これがどのように機能するかを理解できるはずです。

Boot.scala 内

LiftRules.dispatch.append(new RestHelper{
  serve {
    case JsonPost("user" :: "login" :: Nil, (json, _)) =>
      //extract JSON from json object to get username and password
      val userEmail:String = (json \ "username").extract[String]
      val password = (json \ "password").extract[String]
      User.login(userEmail, password) match {
        case Full(r) =>
          User.current(true)
          InMemoryResponse(Array(), Nil, Nil, 200)
        case _ => ForbiddenResponse
      }
  }
})

User.scala 内

object User {
  object loggedIn extends SessionVar[Boolean](false)
}

次にif(User.loggedIn.get){ ... }、ユーザーがどこにでもログインしているかどうかをテストするために使用できます。LiftRules.statelessDispatchセッションを使用する場合、これはステートフル ディスパッチに追加されたものに対して機能しますが、存在しません。

于 2013-05-20T15:54:54.317 に答える
1

github でチェックアウトできる簡単な作業例を作成しました。あなたが提供したコードを使用しているので、うまくいけばかなり簡単です。ここで見ることができます: https://github.com/jcern/lift_httpauth

ただし、基本的にコードをサイトマップに追加するには、次を に追加するだけですBoot.scala

Menu("Login Required") / "user" / "login"

そしてuser/login.html、webapp ルートに があることを確認してください。

于 2013-05-20T14:03:55.800 に答える