Bạn không cần phải bận tâm về mã thông báo làm mới cho đến khi bạn lưu trữ thông số Expiry
. Sau khi nhận được đối tượng 'Mã', lưu trữ sau trong cơ sở dữ liệu của bạn:
token.AccessToken
, token.RefreshToken
, token.TokenType
và token.Expiry
khi lấy, xây dựng các đối tượng thẻ một lần nữa bằng cách sử dụng các thông số trên:
token := new(oauth2.Token)
token.AccessToken = {{ From DataBase }}
token.RefreshToken = {{ From DataBase }}
token.Expiry = {{ From DataBase }}
token.TokenType = {{ From DataBase }}
và sau đó lấy ứng dụng khách http của bạn:
config.Client(ctx, token)
điều này sẽ xử lý làm mới mã thông báo. Trích (thêm thông tin: Golang oauth2 client):
Khách hàng trả về ứng dụng khách HTTP bằng mã thông báo đã cung cấp. Mã thông báo sẽ tự động làm mới khi cần thiết.
Nhược điểm duy nhất là, mã thông báo truy cập được làm mới không được trả lại. Nhưng nó đã có tác dụng! Google không có giới hạn về số lần mã thông báo làm mới được sử dụng.
Từ gist này (https://gist.github.com/jfcote87/89eca3032cd5f9705ba3#file-gistfile1-go-L26-L30) có vẻ như, có bạn nên lấy mã thông báo từ cơ sở dữ liệu của bạn và trả về nó là '* oauth2.Token'. Định nghĩa cấu trúc mã thông báo có tại đây: https://github.com/golang/oauth2/blob/master/token.go#L25-L49. Các liên kết và thảo luận thêm tại đây: https://github.com/golang/oauth2/issues/84 – Intermernet
Ngoài ra, điều này có thể quan tâm "Khách hàng trả lại ứng dụng HTTP bằng mã thông báo đã cung cấp. Mã thông báo sẽ tự động làm mới khi cần thiết. " từ https://godoc.org/golang.org/x/oauth2#Config.Client – Intermernet
Cảm ơn bạn @Intermernet! Tôi sẽ kiểm tra nó tối nay nhưng ngay bây giờ tôi thấy giải pháp cho vấn đề của tôi. Mặc dù mã của tôi có vẻ tương tự nhưng tôi không kiểm tra tính hợp lệ của mã thông báo nên lệnh gọi đầu tiên sau khi hết hạn luôn không thành công. – Andrew