Плагин token, основанный на фреймворке GoFrame, реализует аутентификацию token посредством серверной проверки. Он полностью готов к использованию для аутентификации token в продакшене и поддерживает кластерный режим через Redis. Его легко использовать, вы можете смело его применять.
Полностью совместим с GoFrame v2.0.0; для GoFrame v1.X.X используйте соответствующую версию gtoken v1.4.X.
# Режим кэширования 1 gcache 2 gredis 3 fileCache
CacheMode = 2
// Примечание: по умолчанию срок действия обновляется, когда пользователь заходит на сайт на пятый день
// Тайм-аут по умолчанию составляет 10 дней
Timeout int
// Время обновления кэша по умолчанию равно половине времени ожидания
MaxRefresh int
go get github.com/goflyfox/gtoken
require github.com/goflyfox/gtoken latest
GoFrame официально рекомендует использовать Group для реализации маршрутизации и промежуточного программного обеспечения.
Рекомендуется использовать групповую реализацию.
// Запуск gtoken
gfToken := >oken.GfToken{
LoginPath: "/login",
LoginBeforeFunc: loginFunc,
LogoutPath: "/user/logout",
}
s.Group("/admin", func(group *ghttp.RouterGroup) {
group.Middleware(CORS)
gfToken.Middleware(group)
group.ALL("/system/user", func(r *ghttp.Request) {
r.Response.WriteJson(gtoken.Succ("system user"))
})
………………
})
Реализация метода входа, возврат пустого значения или r.ExitAll()\r.Exit() при неудачной аутентификации.
Особое примечание: зарегистрированные пути должны строго соответствовать формату группы GF, поэтому зарегистрированные пути — это /admin/login и /admin/user/logout.
func Login(r *ghttp.Request) (string, interface{}) {
username := r.GetPostString("username")
passwd := r.GetPostString("passwd")
// TODO провести проверку входа
if username == "" || passwd == "" {
r.Response.WriteJson(gtoken.Fail("账号或密码错误."))
r.ExitAll()
}
// Первое поле — уникальный идентификатор пользователя, второе поле — дополнительные данные пользователя
return username, ""
}
Получение информации для входа с помощью gtoken.GetTokenData(r)
.
AuthExcludePaths: g.SliceStr{"/user/info", "/system/user/*"}, // Не перехватывать пути /user/info,/system/user/info,/system/user,
См. образец проекта, сначала запустите main.go, затем запустите api_test.go для тестирования и просмотра результатов. Проверка логики:
=== RUN TestAdminSystemUser
api_admin_test.go:22: 1. not login and visit user
api_admin_test.go:29: {"code":-401,"msg":"请求错误或登录超时","data":""}
api_admin_test.go:42: 2. execute login and visit user
api_admin_test.go:45: {"code":0,"msg":"success","data":"system user"}
api_admin_test.go:51: 3. execute logout
api_admin_test.go:54: {"code":0,"msg":"success","data":"Logout success"}
api_admin_test.go:60: 4. visit user
api_admin_test.go:65: {"code":-401,"msg":"请求错误或登录超时","data":""}
Требуется только настроить маршрут входа, маршрут выхода, маршрут перехвата и функцию проверки входа.
// Запустить gtoken
gtoken := >oken.GfToken{
LoginPath: "/login",
LoginBeforeFunc: loginFunc,
LogoutPath: "/user/logout",
AuthPaths: g.SliceStr{"/user", "/system"}, // Здесь префикс используется для перехвата, перехватывая /user /user/list /user/add ...
GlobalMiddleware: true, // Включить глобальный перехват, по умолчанию отключено
}
gtoken.Start()
Реализация функции входа, возвращение пустого значения или r.ExitAll()\r.Exit() при ошибке аутентификации.
func Login(r *ghttp.Request) (string, interface{}) {
username := r.GetPostString("username")
passwd := r.GetPostString("passwd")
// TODO выполнить проверку входа
if username == "" || passwd == "" {
r.Response.WriteJson(gtoken.Fail("账号或密码错误."))
r.ExitAll()
}
// Первый параметр — уникальный идентификатор пользователя, второй параметр — дополнительные данные пользователя
return username, ""
}
``` Через `gtoken.GetTokenData(r)` получаем информацию для входа.
### Правила перехвата пути
```go
AuthPaths: g.SliceStr{"/user", "/system"}, // Здесь перехватывается по префиксу, перехватываются /user, /user/list, /user/add ...
AuthExcludePaths: g.SliceStr{"/user/info", "/system/user/*"}, // Не перехватываемые пути /user/info,/system/user/info,/system/user,
GlobalMiddleware: true, // Включить глобальный перехват, по умолчанию выключено
GlobalMiddleware:true
глобальный перехват выполняется через GF-метод BindMiddleware
.GlobalMiddleware:false
перехват пути выполняется через метод GF BindMiddleware
, создавая перехват /user*
и /system/*
./*
.См. sample1 проект, сначала запустите main.go, затем можно запустить api_test.go для тестирования и просмотра результатов; проверка логики:
=== RUN TestSystemUser
api_test.go:43: 1. not login and visit user
api_test.go:50: {"code":-401,"msg":"请求错误或登录超时","data":""}
api_test.go:63: 2. execute login and visit user
api_test.go:66: {"code":0,"msg":"success","data":"system user"}
api_test.go:72: 3. execute logout
api_test.go:75: {"code":0,"msg":"success","data":"Logout success"}
api_test.go:81: 4. visit user
api_test.go:86: {"code":-401,"msg":"请求错误或登录超时","data":""}
SUCCESS = 0 // Нормальный
FAIL = -1 // Ошибка
ERROR = -99 // Исключение
UNAUTHORIZED = -401 // Неавторизованный
Для получения подробной информации см. структуру GfToken
, описание полей:
Название | Конфигурационное поле | Описание | Групповое ПО | Глобальное ПО |
---|---|---|---|---|
Имя сервера | ServerName | По умолчанию пусто | Поддерживается | Поддерживается |
Режим кэширования | CacheMode | 1 gcache 2 gredis 3 fileCache по умолчанию 1 | Поддерживается | Поддерживается |
Ключ кэша | CacheKey | По умолчанию префикс кэша GToken:
|
Поддерживается | Поддерживается |
Время ожидания | Timeout | По умолчанию 10 дней (миллисекунды) | Поддерживается | Поддерживается |
Максимальное время обновления кэша | MaxRefresh | По умолчанию половина времени ожидания (миллисекунды) | Поддерживается | Поддерживается |
Разделитель токенов | TokenDelimiter | По умолчанию _
|
Поддерживается | Поддерживается |
Ключ шифрования токена | EncryptKey | По умолчанию 12345678912345678912345678912345
|
Поддерживается | Поддерживается |
Сообщение об ошибке аутентификации | AuthFailMsg | По умолчанию 请求错误或登录超时
|
Поддерживается | Поддерживается |
Поддержка мультилогина | MultiLogin | По умолчанию false | Поддерживается | Поддерживается |
Тип промежуточного ПО | MiddlewareType | 1、Group 2、Bind 3 、Global; при использовании группового режима не требуется настройка |
Поддерживается | Поддерживается |
Путь входа | LoginPath | Путь интерфейса входа | Поддерживается | Поддерживается |
Функция проверки входа | LoginBeforeFunc | Необходимо реализовать пользовательскую функцию проверки входа | Поддерживается | Поддерживается |
Функция после входа | LoginAfterFunc | Вызывается после завершения входа | Поддерживается | Поддерживается |
Путь выхода | LogoutPath | Путь интерфейса выхода | Поддерживается | Поддерживается |
Проверка перед выходом | LogoutBeforeFunc | Вызывается перед интерфейсом выхода | Поддерживается | Поддерживается |
После выхода | LogoutAfterFunc | Вызывается после выхода из интерфейса | Поддерживается | Поддерживается |
Адрес перехвата | AuthPaths | Этот список путей проходит проверку подлинности | Не требуется | Поддерживается |
Исключения перехвата | AuthExcludePaths | В этом списке путей проверка подлинности не проводится | Поддерживается | Поддерживается |
Перед проверкой подлинности | AuthBeforeFunc | Вызывается до и после проверки подлинности | Поддерживается | Поддерживается |
После проверки подлинности | AuthAfterFunc | Вызывается после проверки подлинности | Поддерживается | Поддерживается |
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )