refresh
今まではcreateSession
で都度、tokenを取得し、新しいsessionを作成してきました。
これらsessionは2時間有効で、apiを呼び出すたびにsessionを作成していると有効なsessionがいくつもできてしまいます。
そして、それぞれが2時間後に無効になります。
これを回避する方法としては、refreshSession
があります。refresh-token
とも呼ばれます。
基本的には、https://bsky.social/xrpc/com.atproto.server.refreshSession
にtokenとしてrefreshJwt
を指定するだけです。
$ cat ~/.config/atr/token.json|jq -r .refreshJwt
$ refresh=`cat ~/.config/atr/token.json|jq -r .refreshJwt`
$ curl -sL -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $refresh" https://bsky.social/xrpc/com.atproto.server.refreshSession
これを保存しておけば、約2ヶ月有効だそうです。
これをrust
で書いてみると、こんな感じになります。
src/refresh.rs
extern crate reqwest;
use crate::token_toml;
use crate::url;
use serde_json::json;
pub async fn post_request() -> String {
let access = token_toml(&"access");
let refresh = token_toml(&"refresh");
let did = token_toml(&"did");
let handle = token_toml(&"handle");
let url = url(&"session_refresh");
let client = reqwest::Client::new();
let res = client
.post(url)
.header("Authorization", "Bearer ".to_owned() + &refresh)
.send()
.await
.unwrap()
.text()
.await
.unwrap();
return res
}