https://www.gravatar.com/avatar/7a0c24f697ea1587001c36d00039b60f?s=240&d=mp

Hexo迁移到hugo

使用hexo构建博客大概是5、6年的事了,在此之前一直使用wordpress来搭建个人的博客。

而早些年博客系统仿佛也只有wordpress,当你想要搭建个人博客时,你只会得到一个答案,那就是wordpress

wordpress是如此强大,丰富的扩展,强大的管理后台,它能提供我们需要的一些。

毫无疑问,这就是我们需要的,何况全世界的人都在使用它。

然而,当面对繁杂而厚重的wordpress时,我们意识到我们需要的只是一个简单的,优雅的,能使用markdown书写的系统。

Sign in With Apple 从登陆到服务器验证

https://img.ibook8.club/15862407395820.jpg

关于手机端登录的代码,这里不做多余介绍,我们看下登录成功后, Apple返回给手机端的一些参数

open var user: String { get }
open var state: String? { get }
open var authorizedScopes: [ASAuthorization.Scope] { get }
open var authorizationCode: Data? { get }
open var identityToken: Data? { get }
open var email: String? { get }
open var fullName: PersonNameComponents? { get }
open var realUserStatus: ASUserDetectionStatus

这里初步登录成功,从 Apple 拿到 useridentityTokenauthorizationCode 等相关信息。

1. 首先手机端先做一个验证

identityToken 是一个 JWT 格式的加密数据 (JWT相关知识介绍 JSON Web Token ),我们通过如下代码拿到 headerpayload 中的数据

guard let _ = identityToken else { return }
            
let token = String(data: identityToken!, encoding: .utf8)
let arr = token?.components(separatedBy: ".")
let header = arr?[0]
let payload = arr?[1]

headerpayload 均是base64编码的字符串,通过如下代码进行解码

注意:swift中需要用NSData进行转换,用Data进行转换会失败

// 这里为了方便,均采用 ! 强行解包
let headerData = NSData(base64EncodedString: payload!)
let decodeHeader = String(data: (headerData! as Data), encoding: .utf8)

let payloadData = NSData(base64EncodedString: payload!)
let decodePayload = String(data: (payloadData! as Data), encoding: .utf8)

得到结果如下

header:
{"kid":"AIDOPK1","alg":"RS256"}

payload:
{"iss":"https://appleid.apple.com","aud":"这个是你的app的bundle identifier","exp":1567482337,"iat":1567481737,"sub":"这个字段和上面获取的 user 字段是完全一样的","c_hash":"8KDzfalU5kygg5zxXiX7dA","auth_time":1567481737}

通过如上操作,我们可以获取到 payload 中的 sub 字段,然后与上面的 user 字段做一个对比,如果对比通过,则第一步完成