| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- package passkey
- import (
- "encoding/json"
- "errors"
- "github.com/gin-contrib/sessions"
- "github.com/gin-gonic/gin"
- webauthn "github.com/go-webauthn/webauthn/webauthn"
- )
- var errSessionNotFound = errors.New("Passkey 会话不存在或已过期")
- func SaveSessionData(c *gin.Context, key string, data *webauthn.SessionData) error {
- session := sessions.Default(c)
- if data == nil {
- session.Delete(key)
- return session.Save()
- }
- payload, err := json.Marshal(data)
- if err != nil {
- return err
- }
- session.Set(key, string(payload))
- return session.Save()
- }
- func PopSessionData(c *gin.Context, key string) (*webauthn.SessionData, error) {
- session := sessions.Default(c)
- raw := session.Get(key)
- if raw == nil {
- return nil, errSessionNotFound
- }
- session.Delete(key)
- _ = session.Save()
- var data webauthn.SessionData
- switch value := raw.(type) {
- case string:
- if err := json.Unmarshal([]byte(value), &data); err != nil {
- return nil, err
- }
- case []byte:
- if err := json.Unmarshal(value, &data); err != nil {
- return nil, err
- }
- default:
- return nil, errors.New("Passkey 会话格式无效")
- }
- return &data, nil
- }
|