diff --git a/selfservice/strategy/oidc/strategy.go b/selfservice/strategy/oidc/strategy.go index f1ed22341626..5e3dc09e46b3 100644 --- a/selfservice/strategy/oidc/strategy.go +++ b/selfservice/strategy/oidc/strategy.go @@ -206,9 +206,13 @@ func (s *Strategy) redirectToGET(w http.ResponseWriter, r *http.Request, _ httpr type NewStrategyOpt func(s *Strategy) +// ForCredentialType overrides the credentials type for this strategy. func ForCredentialType(ct identity.CredentialsType) NewStrategyOpt { return func(s *Strategy) { s.credType = ct } } + +// WithUnknownProviderHandler overrides the error returned when the provider +// cannot be found. func WithUnknownProviderHandler(handler func(error) error) NewStrategyOpt { return func(s *Strategy) { s.handleUnknownProviderError = handler } } diff --git a/selfservice/strategy/oidc/strategy_login.go b/selfservice/strategy/oidc/strategy_login.go index 4ec58a25590b..7bc4e91b1f6d 100644 --- a/selfservice/strategy/oidc/strategy_login.go +++ b/selfservice/strategy/oidc/strategy_login.go @@ -217,12 +217,12 @@ func (s *Strategy) Login(w http.ResponseWriter, r *http.Request, f *login.Flow, return nil, errors.WithStack(flow.ErrStrategyNotResponsible) } - if err := flow.MethodEnabledAndAllowed(ctx, f.GetFlowName(), s.SettingsStrategyID(), s.SettingsStrategyID(), s.d); err != nil { + provider, err := s.provider(ctx, pid) + if err != nil { return nil, s.handleError(ctx, w, r, f, pid, nil, err) } - provider, err := s.provider(ctx, pid) - if err != nil { + if err := flow.MethodEnabledAndAllowed(ctx, f.GetFlowName(), s.SettingsStrategyID(), s.SettingsStrategyID(), s.d); err != nil { return nil, s.handleError(ctx, w, r, f, pid, nil, err) } diff --git a/selfservice/strategy/oidc/strategy_registration.go b/selfservice/strategy/oidc/strategy_registration.go index b42fa476d33d..dbed0348182d 100644 --- a/selfservice/strategy/oidc/strategy_registration.go +++ b/selfservice/strategy/oidc/strategy_registration.go @@ -187,12 +187,12 @@ func (s *Strategy) Register(w http.ResponseWriter, r *http.Request, f *registrat return errors.WithStack(flow.ErrStrategyNotResponsible) } - if err := flow.MethodEnabledAndAllowed(ctx, f.GetFlowName(), s.SettingsStrategyID(), s.SettingsStrategyID(), s.d); err != nil { + provider, err := s.provider(ctx, pid) + if err != nil { return s.handleError(ctx, w, r, f, pid, nil, err) } - provider, err := s.provider(ctx, pid) - if err != nil { + if err := flow.MethodEnabledAndAllowed(ctx, f.GetFlowName(), s.SettingsStrategyID(), s.SettingsStrategyID(), s.d); err != nil { return s.handleError(ctx, w, r, f, pid, nil, err) }