{"adoption": {"forks": 233, "observed_at": "2026-08-28T04:04:54.703256+00:00", "stars": 1504}, "canonical_url": "https://ross.abutalabs.com/products/simple_token_authentication", "card": {"archived": false, "artifact_type": "library", "description": "Simple (and safe*) token authentication for Rails apps or API with Devise.", "domain": ["security", "web-development", "apis"], "enriched": true, "function": ["auth"], "health_score": 20, "homepage": null, "language": "Ruby", "license": "GPL-3.0", "license_family": "copyleft", "maturity": "maintenance", "member_repos": ["gonzalo-bulnes/simple_token_authentication"], "name": "gonzalo-bulnes/simple_token_authentication", "platform": ["ruby"], "pushed_at": "2024-12-03T23:55:12+00:00", "repo": "gonzalo-bulnes/simple_token_authentication", "stars": 1504, "tags": ["devise", "rails", "token-authentication", "mongoid", "api-authentication", "gem"], "topics": ["ruby", "devise", "authentication", "rails", "mongoid", "api"], "urls": [], "use_cases": ["add token authentication to a Rails API with Devise", "implement single-use sign-in links sent by email", "generate and revoke authentication tokens for users", "securely compare authentication tokens in Rails", "replace the token authentication removed from Devise", "authenticate mobile or API clients against a Rails backend"], "what_it_is": "A Ruby gem that adds simple token authentication to Rails applications or APIs using Devise. It packages José Valim's recommended safe token authentication approach, providing token generation, revocation, and comparison with configurable options.", "when_to_avoid": ["you need protection against replay attacks out of the box", "you want a complete, audited authentication protocol without designing it yourself", "you need JWT or OAuth2-style token flows", "your threat model requires independently audited security"], "when_to_choose": ["you already use Devise in a Rails app and need token-based authentication", "you understand replay attacks and can mitigate them in your protocol", "you need single-use sign-in tokens such as email magic links", "you want a minimal, flexible token mechanism rather than a full JWT solution"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/simple_token_authentication", "repo": "gonzalo-bulnes/simple_token_authentication", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.703256+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:32:45.660276+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a5057a8a6341893027119b447b54323f1c8146e03e587dc13f593b8e8382efcc", "fetched_at": "2026-08-28T04:04:54.703256+00:00", "kind": "readme", "missing": false, "url": "https://github.com/gonzalo-bulnes/simple_token_authentication"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.703256+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:32:45.660276+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a5057a8a6341893027119b447b54323f1c8146e03e587dc13f593b8e8382efcc", "fetched_at": "2026-08-28T04:04:54.703256+00:00", "kind": "readme", "missing": false, "url": "https://github.com/gonzalo-bulnes/simple_token_authentication"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:32:45.660276+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a5057a8a6341893027119b447b54323f1c8146e03e587dc13f593b8e8382efcc", "fetched_at": "2026-08-28T04:04:54.703256+00:00", "kind": "readme", "missing": false, "url": "https://github.com/gonzalo-bulnes/simple_token_authentication"}], "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:04:54.703256+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.703256+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.703256+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:32:45.660276+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a5057a8a6341893027119b447b54323f1c8146e03e587dc13f593b8e8382efcc", "fetched_at": "2026-08-28T04:04:54.703256+00:00", "kind": "readme", "missing": false, "url": "https://github.com/gonzalo-bulnes/simple_token_authentication"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.703256+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.703256+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:32:45.660276+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a5057a8a6341893027119b447b54323f1c8146e03e587dc13f593b8e8382efcc", "fetched_at": "2026-08-28T04:04:54.703256+00:00", "kind": "readme", "missing": false, "url": "https://github.com/gonzalo-bulnes/simple_token_authentication"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.703256+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.703256+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.703256+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:32:45.660276+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a5057a8a6341893027119b447b54323f1c8146e03e587dc13f593b8e8382efcc", "fetched_at": "2026-08-28T04:04:54.703256+00:00", "kind": "readme", "missing": false, "url": "https://github.com/gonzalo-bulnes/simple_token_authentication"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.703256+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:54.703256+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:32:45.660276+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a5057a8a6341893027119b447b54323f1c8146e03e587dc13f593b8e8382efcc", "fetched_at": "2026-08-28T04:04:54.703256+00:00", "kind": "readme", "missing": false, "url": "https://github.com/gonzalo-bulnes/simple_token_authentication"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:32:45.660276+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a5057a8a6341893027119b447b54323f1c8146e03e587dc13f593b8e8382efcc", "fetched_at": "2026-08-28T04:04:54.703256+00:00", "kind": "readme", "missing": false, "url": "https://github.com/gonzalo-bulnes/simple_token_authentication"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:32:45.660276+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a5057a8a6341893027119b447b54323f1c8146e03e587dc13f593b8e8382efcc", "fetched_at": "2026-08-28T04:04:54.703256+00:00", "kind": "readme", "missing": false, "url": "https://github.com/gonzalo-bulnes/simple_token_authentication"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:32:45.660276+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a5057a8a6341893027119b447b54323f1c8146e03e587dc13f593b8e8382efcc", "fetched_at": "2026-08-28T04:04:54.703256+00:00", "kind": "readme", "missing": false, "url": "https://github.com/gonzalo-bulnes/simple_token_authentication"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4644, "days_push": 638, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 23, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}