{"adoption": {"forks": 1132, "observed_at": "2026-08-28T04:08:10.720733+00:00", "stars": 3571}, "canonical_url": "https://ross.abutalabs.com/products/devise-token-auth", "card": {"archived": false, "artifact_type": "library", "description": "Token based authentication for Rails JSON APIs. Designed to work with jToker and ng-token-auth.", "domain": ["web-development", "backend", "security", "apis"], "enriched": true, "function": ["auth", "middleware", "api-framework"], "health_score": 77, "homepage": null, "language": "Ruby", "license": "WTFPL", "license_family": "permissive", "maturity": "active", "member_repos": ["lynndylanhurley/devise_token_auth", "lynndylanhurley/ng-token-auth", "lynndylanhurley/redux-auth"], "name": "devise token auth", "platform": ["ruby"], "pushed_at": "2026-07-31T13:14:56+00:00", "repo": "lynndylanhurley/devise_token_auth", "stars": 3571, "tags": ["rails", "devise", "token-authentication", "spa", "omniauth", "oauth2", "json-api", "mobile-backend", "web-server"], "topics": ["devise", "rails", "authentication", "api", "oauth", "omniauth"], "urls": [], "use_cases": ["add token authentication to a Rails JSON API", "authenticate a SPA or mobile app against a Rails backend", "support OAuth2 login with OmniAuth in a Rails API", "manage multiple simultaneous device sessions per user", "implement email registration, login, and password reset for an API", "connect a React or Angular frontend to Rails token auth"], "what_it_is": "A Ruby gem providing token-based authentication for Rails JSON APIs, built on Devise and OmniAuth. It supports multi-client sessions, token refresh, OAuth2, email auth, and integrates with frontend clients like ng-token-auth, jToker, and redux-auth.", "when_to_avoid": ["you're building a traditional server-rendered Rails app with cookie sessions", "you're not using Rails or Ruby", "you prefer JWT-based auth or a newer API auth solution", "you need a framework-agnostic authentication system"], "when_to_choose": ["you're building a Rails JSON API serving SPA or mobile clients", "you need multi-device token sessions with refresh and expiry", "you want Devise-style email auth plus OAuth2 in an API", "you're using a compatible frontend client like ng-token-auth or jToker"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/repos/lynndylanhurley/devise_token_auth", "repo": "lynndylanhurley/devise_token_auth", "role": "main", "score": 75}, {"path": "/repos/lynndylanhurley/redux-auth", "repo": "lynndylanhurley/redux-auth", "role": "sdk", "score": 32}, {"path": "/repos/lynndylanhurley/ng-token-auth", "repo": "lynndylanhurley/ng-token-auth", "role": "sdk", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:08:10.720733+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:34:05.925813+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c218a06bf998ab5e26ef38b645a62fb1852424148d3b5c6fe0401d565aacc112", "fetched_at": "2026-08-28T04:08:10.720733+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lynndylanhurley/devise_token_auth"}, {"content_hash": "564060372b501aa2e778b83a79d04a4625a383048cedcad76110159f299938fd", "fetched_at": "2026-08-29T09:28:18.480625+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/redux-auth"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:08:10.720733+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:34:05.925813+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c218a06bf998ab5e26ef38b645a62fb1852424148d3b5c6fe0401d565aacc112", "fetched_at": "2026-08-28T04:08:10.720733+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lynndylanhurley/devise_token_auth"}, {"content_hash": "564060372b501aa2e778b83a79d04a4625a383048cedcad76110159f299938fd", "fetched_at": "2026-08-29T09:28:18.480625+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/redux-auth"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:34:05.925813+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c218a06bf998ab5e26ef38b645a62fb1852424148d3b5c6fe0401d565aacc112", "fetched_at": "2026-08-28T04:08:10.720733+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lynndylanhurley/devise_token_auth"}, {"content_hash": "564060372b501aa2e778b83a79d04a4625a383048cedcad76110159f299938fd", "fetched_at": "2026-08-29T09:28:18.480625+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/redux-auth"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:08:10.720733+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:08:10.720733+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:08:10.720733+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:34:05.925813+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c218a06bf998ab5e26ef38b645a62fb1852424148d3b5c6fe0401d565aacc112", "fetched_at": "2026-08-28T04:08:10.720733+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lynndylanhurley/devise_token_auth"}, {"content_hash": "564060372b501aa2e778b83a79d04a4625a383048cedcad76110159f299938fd", "fetched_at": "2026-08-29T09:28:18.480625+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/redux-auth"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:08:10.720733+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:08:10.720733+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:34:05.925813+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c218a06bf998ab5e26ef38b645a62fb1852424148d3b5c6fe0401d565aacc112", "fetched_at": "2026-08-28T04:08:10.720733+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lynndylanhurley/devise_token_auth"}, {"content_hash": "564060372b501aa2e778b83a79d04a4625a383048cedcad76110159f299938fd", "fetched_at": "2026-08-29T09:28:18.480625+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/redux-auth"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:08:10.720733+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:08:10.720733+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:08:10.720733+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:34:05.925813+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c218a06bf998ab5e26ef38b645a62fb1852424148d3b5c6fe0401d565aacc112", "fetched_at": "2026-08-28T04:08:10.720733+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lynndylanhurley/devise_token_auth"}, {"content_hash": "564060372b501aa2e778b83a79d04a4625a383048cedcad76110159f299938fd", "fetched_at": "2026-08-29T09:28:18.480625+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/redux-auth"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:08:10.720733+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:08:10.720733+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:34:05.925813+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c218a06bf998ab5e26ef38b645a62fb1852424148d3b5c6fe0401d565aacc112", "fetched_at": "2026-08-28T04:08:10.720733+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lynndylanhurley/devise_token_auth"}, {"content_hash": "564060372b501aa2e778b83a79d04a4625a383048cedcad76110159f299938fd", "fetched_at": "2026-08-29T09:28:18.480625+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/redux-auth"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:34:05.925813+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c218a06bf998ab5e26ef38b645a62fb1852424148d3b5c6fe0401d565aacc112", "fetched_at": "2026-08-28T04:08:10.720733+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lynndylanhurley/devise_token_auth"}, {"content_hash": "564060372b501aa2e778b83a79d04a4625a383048cedcad76110159f299938fd", "fetched_at": "2026-08-29T09:28:18.480625+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/redux-auth"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:34:05.925813+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c218a06bf998ab5e26ef38b645a62fb1852424148d3b5c6fe0401d565aacc112", "fetched_at": "2026-08-28T04:08:10.720733+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lynndylanhurley/devise_token_auth"}, {"content_hash": "564060372b501aa2e778b83a79d04a4625a383048cedcad76110159f299938fd", "fetched_at": "2026-08-29T09:28:18.480625+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/redux-auth"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:34:05.925813+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c218a06bf998ab5e26ef38b645a62fb1852424148d3b5c6fe0401d565aacc112", "fetched_at": "2026-08-28T04:08:10.720733+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lynndylanhurley/devise_token_auth"}, {"content_hash": "564060372b501aa2e778b83a79d04a4625a383048cedcad76110159f299938fd", "fetched_at": "2026-08-29T09:28:18.480625+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/redux-auth"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 95, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4448, "days_push": 33, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 75, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}