私はakka-httpを使ってREST APIをビルドしています。 (私はREST Webサービスを構築するために新しいです)。 セッションを使用せずにクッキーを取得して設定する方法がわかりません。このCookieには、暗号化トークンアクセスが含まれている必要があります。私はプレイやスプレーを使用しません。 一瞬のための私のコードは次のとおりです。リンクされたAPI用のAkka-http&scribe:セッションなしでクッキーを設定/取得する(scala)
lazy val signin = path("signin") {
get {
/* create the OAuthService object with a callback URL*/
val service = buildService()
/* get the request token*/
val requestToken = service.getRequestToken
/* create the cookie */
val jwtCookieEncrypted = tokenUtil.createLinkedinTokenSecret(requestToken)
val cookie = HttpCookie("jwtTokenCookie", jwtCookieEncrypted)
/* making the user validate our requestToken by redirecting him to the following URL*/
val authURL = service.getAuthorizationUrl(requestToken)
redirect(authURL, StatusCodes.TemporaryRedirect)
}
}
lazy val callback = path("callback") {
// extract cookie with the jwtTokenCookie name
cookie("jwtTokenCookie") { cookiePair =>
complete(s"The logged in user is '${cookiePair.name}'")
}
get {
parameters('code, 'state) { (code, state) => // must come from cookie and not request parameters
/* create the OAuthService object with a callback URL*/
val service = buildService()
/* get the request token*/
val requestToken = new Token(code, state)
if(state == tokenUtil.decryptLinkedinToken(requestToken.getSecret).getOrElse("")) "continue" else "throw error"
val verifier = new Verifier(state)
/* get the access token
(need to exchange requestToken and verifier for an accessToken which is the one used to sign requests)*/
val accessToken = service.getAccessToken(requestToken, verifier)
logger.debug(accessToken.getRawResponse)
/* sign request*/
val ResourceUrl = Settings.LinkedIn.ResourceUrl
val request = new OAuthRequest(Verb.GET, ResourceUrl)
service.signRequest(accessToken, request)
val response = request.send
if (response.getCode == StatusCodes.OK.intValue) complete(response.getBody)
else complete(int2StatusCode(response.getCode))
}
}
}
signin ~ callback
ご回答ありがとうございます。 どういう意味ですか?リダイレクトは良い方法ではありませんか?私はそれがScribeの役割だと思った。 –
リダイレクト機能は30xコードで応答を作成する。ヘッダー "Set-cookie"を追加する場合は、リダイレクトを呼び出す代わりに、 "手動で"応答を作成する方がよいでしょう。 – EmiCareOfCell44