shaj13 / go-guardian

Go-Guardian is a golang library that provides a simple, clean, and idiomatic way to create powerful modern API and web authentication.
MIT License
559 stars 56 forks source link

Issue with example directory #121

Closed quentinalbertone closed 1 year ago

quentinalbertone commented 2 years ago

What version of Go are you using (go version)?

$ go version
go version go1.18.3 linux/amd64

Does this issue reproduce with the latest release?

Yes

What version of Go-Guardian are you using ?

Go-Guardian Version:  v2.11.5
Libcache Version: v1.0.5

What did you do?

Hello, I just want to follow the jwt example https://github.com/shaj13/go-guardian/blob/master/_examples/jwt/main.go But the function RegisterOnExpired was deprecated and no-longer works. Can you update the example directory on this repo.

What did you expect to see?

The program init and run

What did you see instead?

$> go run ./...
panic: RegisterOnExpired no longer available

goroutine 1 [running]:
github.com/shaj13/libcache/internal.(*Cache).RegisterOnExpired(0x18?, 0x7c80a0?)
    /home/xxx/go/pkg/mod/github.com/shaj13/libcache@v1.0.5/internal/cache.go:379 +0x27
github.com/shaj13/libcache.(*cache).RegisterOnExpired(0xc00009e120, 0x6?)
    /home/xxx/go/pkg/mod/github.com/shaj13/libcache@v1.0.5/cache.go:245 +0x56
main.setupGoGuardianJWT()
    /home/xxx/go/src/gitlab.com/xxx/my-project/cmd/go-guardian-jwt.go:33 +0x17d
main.main()
    /home/xxx/go/src/gitlab.com/xxx/my-project/cmd/main.go:20 +0x1d
exit status 2
Ivasan7 commented 2 years ago

+1

Ivasan7 commented 2 years ago

@quentinalbertone

I have found a workaround that works for me, maybe a bit hacky, but try it.

func setupGoGuardian() {
    keeper = jwt.StaticSecret{
        ID:        "secret-id",
        Secret:    []byte("secret"),
        Algorithm: jwt.HS256,
    }
    cache := libcache.FIFO.New(0)
    cache.SetTTL(time.Minute * 5)
    chl := make(chan libcache.Event)
    defer close(chl)

    cache.Notify(chl, libcache.Remove)

    go func(chl chan libcache.Event) {
        event := <-chl
        cache.Peek(event.Key)
    }(chl)
    basicStrategy := basic.NewCached(validateUser, cache)
    jwtStrategy := jwt.New(cache, keeper)
    strategy = union.New(jwtStrategy, basicStrategy)
}
Ivasan7 commented 2 years ago

Added also a PR https://github.com/shaj13/go-guardian/pull/122

Ivasan7 commented 2 years ago

@quentinalbertone

One more bug after, but then it sort of works. Apply the following change as well.

https://github.com/shaj13/go-guardian/pull/123

shaj13 commented 2 years ago

@quentinalbertone will update the example asap. @Ivasan7 thanks, will take a look into your PR,

with the new version of libcache you can clean the cache in two different mechanisms