AlexxIT/go2rtc · error

invalid auth type for email authentication

Error message

invalid auth type for email authentication

What it means

Type assertion guard in RingApi.GetAuth: email authentication with a 2FA code is requested, but the configured auth is not an EmailAuth value (e.g. refresh-token flow with an empty code). The auth config type is at fault.

Solutions

  1. Configure EmailAuth credentials when authenticating with username/password
  2. Provide a valid refresh token so the refresh flow is used instead of email auth
Defensive patterns

Strategy: type-guard

When it happens

Trigger: Thrown at pkg/ring/api.go:238 when the library encounters an invalid state.

Common situations: See trigger scenarios.

Understand the failure class


AI-assisted analysis of AlexxIT/go2rtc@c245815e75 (2026-09-07). Data as JSON: /api/errors/0896cef0071203cd. Report an issue: GitHub.

Appendix: source

Thrown at pkg/ring/api.go:238

	return commandsAPIBaseURL + path
}

func AppAPI(path string) string {
	return appAPIBaseURL + path
}

func (c *RingApi) GetAuth(twoFactorAuthCode string) (*AuthTokenResponse, error) {
	var grantData map[string]string

	if c.authConfig != nil && twoFactorAuthCode == "" {
		grantData = map[string]string{
			"grant_type":    "refresh_token",
			"refresh_token": c.authConfig.RT,
		}
	} else {
		authEmail, ok := c.auth.(EmailAuth)
		if !ok {
			return nil, fmt.Errorf("invalid auth type for email authentication")
		}
		grantData = map[string]string{
			"grant_type": "password",
			"username":   authEmail.Email,
			"password":   authEmail.Password,
		}
	}

	grantData["client_id"] = "ring_official_android"
	grantData["scope"] = "client"

	body, err := json.Marshal(grantData)
	if err != nil {
		return nil, fmt.Errorf("failed to marshal auth request: %w", err)
	}

	req, err := http.NewRequest("POST", oauthURL, bytes.NewReader(body))
	if err != nil {

View on GitHub (pinned to c245815e75)