You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

53 lines
1.4 KiB

package facebook_auth
import (
"context"
"errors"
)
type (
ISys interface {
Auth(ctx context.Context, idToken string) (info *FacebookTokenInfo, err error)
}
FacebookTokenDebugResponse struct {
Data *FacebookTokenInfo `json:"data"`
}
FacebookTokenInfo struct {
AppID string `json:"app_id"`
IsValid bool `json:"is_valid"`
UserID string `json:"user_id"`
ExpiresAt int64 `json:"expires_at"`
Scopes []string `json:"scopes"`
Error *struct {
Code int `json:"code"`
Message string `json:"message"`
} `json:"error"`
}
)
var defsys ISys
// ErrNotInited Facebook 登录未初始化。OnInit 失败时调用方可选择降级;此时包级函数返回本错误,而不是 panic。
var ErrNotInited = errors.New("facebook_auth 未初始化:配置缺失")
func OnInit(config map[string]interface{}, option ...Option) error {
sys, err := newSys(newOptions(config, option...))
if err != nil {
// 出错时不要给 defsys 赋值,避免「非 nil 接口 + nil 指针」让守卫失效。
return err
}
defsys = sys
return nil
}
func NewSys(option ...Option) (sys ISys, err error) {
sys, err = newSys(newOptionsByOption(option...))
return
}
func Auth(ctx context.Context, idToken string) (info *FacebookTokenInfo, err error) {
if defsys == nil {
return nil, ErrNotInited
}
return defsys.Auth(ctx, idToken)
}