Golang用户身份验证包使用指南
Golang用户身份验证包使用指南 大家好,
我正在寻找一些关于可靠的用户管理模块的建议。理想情况下,我希望能够部署到 Heroku,并且更倾向于使用 PostgreSQL。
此致
Steven
1 回复
更多关于Golang用户身份验证包使用指南的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
对于在Golang中实现用户身份验证并部署到Heroku,我推荐使用authboss包配合PostgreSQL。以下是一个完整的示例:
package main
import (
"database/sql"
"log"
"net/http"
"github.com/volatiletech/authboss/v3"
abclientstate "github.com/volatiletech/authboss/v3/clientstate"
"github.com/volatiletech/authboss/v3/defaults"
_ "github.com/lib/pq"
)
type User struct {
ID int
Email string
Password string
}
func main() {
// 连接PostgreSQL数据库
db, err := sql.Open("postgres", os.Getenv("DATABASE_URL"))
if err != nil {
log.Fatal(err)
}
defer db.Close()
// 配置Authboss
ab := authboss.New()
ab.Config.Storage.Server = NewMemStorer()
ab.Config.Storage.SessionState = abclientstate.NewCookieStorer([]byte("signing-key"), nil)
ab.Config.Storage.CookieState = abclientstate.NewCookieStorer([]byte("encryption-key"), nil)
// 配置PostgreSQL存储
ab.Config.Storage.Server = NewPGStorer(db)
// 设置默认配置
defaults.SetCore(&ab.Config, false, false)
// 启动服务器
mux := http.NewServeMux()
mux.Handle("/auth/", ab.LoadClientStateMiddleware(ab.NewRouter()))
port := os.Getenv("PORT")
if port == "" {
port = "8080"
}
log.Printf("服务器运行在端口 %s", port)
log.Fatal(http.ListenAndServe(":"+port, mux))
}
// PostgreSQL存储实现
type PGStorer struct {
db *sql.DB
}
func NewPGStorer(db *sql.DB) *PGStorer {
return &PGStorer{db: db}
}
func (p *PGStorer) Save(ctx context.Context, key string, attr authboss.Attributes) error {
// 实现用户保存逻辑
_, err := p.db.ExecContext(ctx,
"INSERT INTO users (email, password) VALUES ($1, $2)",
attr["email"], attr["password"])
return err
}
func (p *PGStorer) Load(ctx context.Context, key string) (authboss.Attributes, error) {
// 实现用户加载逻辑
var user User
err := p.db.QueryRowContext(ctx,
"SELECT id, email, password FROM users WHERE email = $1", key).Scan(
&user.ID, &user.Email, &user.Password)
if err != nil {
return nil, err
}
return authboss.Attributes{
"email": user.Email,
"password": user.Password,
}, nil
}
需要在Heroku上设置环境变量:
heroku config:set DATABASE_URL=your_postgresql_url
heroku config:set AB_CLIENT_STATE_SIGNING_KEY=your_signing_key
heroku config:set AB_CLIENT_STATE_ENCRYPTION_KEY=your_encryption_key
数据库表结构:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
email VARCHAR(255) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT NOW()
);
这个配置提供了完整的用户注册、登录、会话管理功能,完全兼容Heroku部署环境并使用PostgreSQL作为数据存储。

