Antara muka R ke Ghost CMS API
P粉134288794
P粉134288794 2023-08-03 12:45:37
0
1
503
<p>Saya cuba menyambung ke contoh Ghost CMS tempatan daripada R menggunakan API Pentadbiran terbina dalam. Terdapat dokumentasi yang baik (https://ghost.org/docs/admin-api/#token-authentication) tentang cara menyambung dalam pelbagai bahasa, tetapi malangnya tiada dokumentasi untuk R. Saya telah menulis kod berikut tetapi malangnya saya menerima ralat 401 apabila cuba membuat artikel ujian. Sebarang bantuan amatlah dihargai. <br /><br />Kod R:</p><p><strong></strong></p> <pre class="brush:php;toolbar:false;">api_admin_key <- "xxxxxx:yyyyyyyyyyyyyyy" api_admin_key <- unlist(strsplit(x = api_admin_key, split = ":")) nama(kunci_admin_api) <- c("id", "rahsia") # Sediakan pengepala dan muatan iat <- as.integer(Sys.time()) pengepala <- list(alg = 'HS256', typ = 'JWT', kid = api_admin_key[["id"]]) # Buat token (termasuk rahsia penyahkodan) muatan <- jose::jwt_claim(iat = iat, exp = iat + 5 * 60, aud = '/admin/') token <- jose::jwt_encode_hmac( tuntutan = muatan, rahsia = charToRaw(api_admin_key[["rahsia"]]), saiz = 256, pengepala = pengepala ) # Buat permintaan yang disahkan untuk membuat siaran url <- 'http://localhost:2368/ghost/api/admin/posts/' pengepala <- c('Keizinan' = tampal("Hantu", token)) badan <- senarai(siaran = senarai( "title" = 'Hello World', "html" = "<p>Kandungan siaran saya. Kerja sedang dijalankan...</p>", "status" = "diterbitkan" ) ) httr::POST(url, badan = badan, encode = "json", httr::add_headers(.headers = headers))</pre> <p><br /></p>
P粉134288794
P粉134288794

membalas semua(1)
P粉739706089

Nampaknya masalahnya ialah dengan parameter secret= yang anda hantar ke jwt_encode_hmac(). Fungsi charToRaw tidak dapat memahami nombor perenambelasan, ia hanya menggunakan kod aksara ASCII. Untuk melakukan penukaran, anda perlu menggunakan salah satu fungsi hex_to_raw daripada soalan sedia ada. Saya menggunakan fungsi di sini untuk melakukan penukaran.

hex_to_raw <- function(x) {
  digits <- strtoi(strsplit(x, "")[[1]], base=16L)
  as.raw(bitwShiftL(digits[c(TRUE, FALSE)],4) + digits[c(FALSE, TRUE)])
}

Selain itu, anda tidak perlu menentukan alg dan taip dalam pengepala kerana ini akan ditambah secara automatik oleh fungsi. Jadi anda boleh membina token anda menggunakan:

api_admin_key <- "adam:12bd18f2cd12"

api_admin_key <- unlist(strsplit(x = api_admin_key, split = ":"))
names(api_admin_key) <- c("id", "secret")

# Prepare header and payload
iat <- as.integer(Sys.time())
header <- list(kid = api_admin_key[["id"]])

# Create the token (including decoding secret)
payload <-
  jose::jwt_claim(iat = iat,
                  exp = iat + 5 * 60,
                  aud = '/admin/')

token <-
  jose::jwt_encode_hmac(
    claim = payload,
    secret = hex_to_raw(api_admin_key[["secret"]]),
    size = 256,
    header = header
  )

Saya menguji setiap token menggunakan penyahpepijat di https://jwt.io/ dan ia kelihatan setara. Dalam penyahpepijat, nilai dikodkan Base64 bagi nilai perenambelasan "12bd18f2cd12" ialah "Er0Y8s0S".

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!