{"id":49010136,"url":"https://github.com/carvalhoviniciusluiz/mongoose-devise","last_synced_at":"2026-04-18T22:17:56.887Z","repository":{"id":57302013,"uuid":"127660446","full_name":"carvalhoviniciusluiz/mongoose-devise","owner":"carvalhoviniciusluiz","description":"Another flexible authentication solution for mongoose.","archived":false,"fork":false,"pushed_at":"2018-11-17T15:57:44.000Z","size":160,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-10-27T21:53:01.104Z","etag":null,"topics":["authentication","blockade","confirmation","devise","mongoose","node","recoveration","register"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/carvalhoviniciusluiz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-04-01T18:36:09.000Z","updated_at":"2020-08-15T00:17:27.000Z","dependencies_parsed_at":"2022-09-07T00:11:26.930Z","dependency_job_id":null,"html_url":"https://github.com/carvalhoviniciusluiz/mongoose-devise","commit_stats":null,"previous_names":["carvalhoviniciusluiz/node-devise"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/carvalhoviniciusluiz/mongoose-devise","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carvalhoviniciusluiz%2Fmongoose-devise","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carvalhoviniciusluiz%2Fmongoose-devise/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carvalhoviniciusluiz%2Fmongoose-devise/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carvalhoviniciusluiz%2Fmongoose-devise/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/carvalhoviniciusluiz","download_url":"https://codeload.github.com/carvalhoviniciusluiz/mongoose-devise/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carvalhoviniciusluiz%2Fmongoose-devise/sbom","scorecard":{"id":266941,"data":{"date":"2025-08-11","repo":{"name":"github.com/carvalhoviniciusluiz/mongoose-devise","commit":"96fc01c87387ab0546e5237abf8b926576e64810"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.7,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Code-Review","score":0,"reason":"Found 0/16 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":0,"reason":"71 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-6chw-6frg-f759","Warn: Project is vulnerable to: GHSA-v88g-cgmw-v5xw","Warn: Project is vulnerable to: GHSA-93q8-gq69-wqmw","Warn: Project is vulnerable to: GHSA-fwr7-v2mv-hh25","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-cwfw-4gq5-mrqx","Warn: Project is vulnerable to: GHSA-g95f-p29q-9xw4","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-w8qv-6jwh-64r5","Warn: Project is vulnerable to: GHSA-4jwp-vfvf-657p","Warn: Project is vulnerable to: GHSA-v8w9-2789-6hhr","Warn: Project is vulnerable to: GHSA-c6rq-rjc2-86v2","Warn: Project is vulnerable to: GHSA-257v-vj4p-3w2h","Warn: Project is vulnerable to: GHSA-h452-7996-h45h","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-gxpj-cx7g-858c","Warn: Project is vulnerable to: GHSA-w573-4hg7-7wgq","Warn: Project is vulnerable to: GHSA-ff7x-qrg7-qggm","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-8r6j-v8pm-fqw3","Warn: Project is vulnerable to: MAL-2023-462","Warn: Project is vulnerable to: GHSA-4q6p-r6v2-jvc5","Warn: Project is vulnerable to: GHSA-43f8-2h32-f4cj","Warn: Project is vulnerable to: GHSA-qqgx-2p2h-9c37","Warn: Project is vulnerable to: GHSA-7r28-3m3f-r2pr","Warn: Project is vulnerable to: GHSA-r8j5-h5cx-65gg","Warn: Project is vulnerable to: GHSA-2pr6-76vf-7546","Warn: Project is vulnerable to: GHSA-8j8c-7jfh-h6hx","Warn: Project is vulnerable to: GHSA-9c47-m6qq-7p4h","Warn: Project is vulnerable to: GHSA-6c8f-qphg-qjgp","Warn: Project is vulnerable to: GHSA-76p3-8jx3-jpfq","Warn: Project is vulnerable to: GHSA-jf85-cpcp-j695","Warn: Project is vulnerable to: GHSA-p6mc-m468-83gw","Warn: Project is vulnerable to: GHSA-29mw-wpgm-hmr9","Warn: Project is vulnerable to: GHSA-35jh-r3h4-6jhm","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-vh95-rmgr-6w4m","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-fhjf-83wg-r2j9","Warn: Project is vulnerable to: GHSA-8hfj-j24r-96c4","Warn: Project is vulnerable to: GHSA-wc69-rhjr-hc9g","Warn: Project is vulnerable to: GHSA-mh5c-679w-hh4r","Warn: Project is vulnerable to: GHSA-8687-vv9j-hgph","Warn: Project is vulnerable to: GHSA-f825-f98c-gj3g","Warn: Project is vulnerable to: GHSA-h8hf-x3f4-xwgp","Warn: Project is vulnerable to: GHSA-9m93-w8w6-76hh","Warn: Project is vulnerable to: GHSA-m7xq-9374-9rvx","Warn: Project is vulnerable to: GHSA-vg7j-7cwx-8wgw","Warn: Project is vulnerable to: GHSA-p92x-r36w-9395","Warn: Project is vulnerable to: GHSA-45q2-34rf-mr94","Warn: Project is vulnerable to: GHSA-hj48-42vr-x3v9","Warn: Project is vulnerable to: GHSA-g6ww-v8xp-vmwg","Warn: Project is vulnerable to: GHSA-566m-qj78-rww5","Warn: Project is vulnerable to: GHSA-7fh5-64p2-3v2j","Warn: Project is vulnerable to: GHSA-hwj9-h5mp-3pm3","Warn: Project is vulnerable to: GHSA-hrpp-h998-j3pp","Warn: Project is vulnerable to: GHSA-gcx4-mw62-g8wm","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-4g88-fppr-53pp","Warn: Project is vulnerable to: GHSA-4jqc-8m5r-9rpr","Warn: Project is vulnerable to: GHSA-j44m-qm6p-hp7m","Warn: Project is vulnerable to: GHSA-3jfq-g458-7qm9","Warn: Project is vulnerable to: GHSA-r628-mhmh-qjhw","Warn: Project is vulnerable to: GHSA-9r2w-394v-53qc","Warn: Project is vulnerable to: GHSA-5955-9wpr-37jh","Warn: Project is vulnerable to: GHSA-qq89-hq3f-393p","Warn: Project is vulnerable to: GHSA-f5x3-32g6-xq36","Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-17T12:20:12.406Z","repository_id":57302013,"created_at":"2025-08-17T12:20:12.406Z","updated_at":"2025-08-17T12:20:12.406Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31986766,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T20:23:30.271Z","status":"ssl_error","status_checked_at":"2026-04-18T20:23:29.375Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["authentication","blockade","confirmation","devise","mongoose","node","recoveration","register"],"created_at":"2026-04-18T22:17:56.275Z","updated_at":"2026-04-18T22:17:56.878Z","avatar_url":"https://github.com/carvalhoviniciusluiz.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# mongoose-devise\nAnother flexible authentication solution for [mongoosejs](http://mongoosejs.com/).\n\n[![standard][standard-image]][standard-url]\n[![travis][travis-image]][travis-url]\n[![Code Coverage][coverage-image]][coverage-url]\n[![npm][npm-image]][npm-url]\n\n[standard-image]: https://img.shields.io/badge/code%20style-standard-brightgreen.svg\n[standard-url]: http://standardjs.com/\n[travis-image]: https://travis-ci.org/carvalhoviniciusluiz/mongoose-devise.svg?branch=master\n[travis-url]: https://travis-ci.org/carvalhoviniciusluiz/mongoose-devise\n[coverage-image]: https://scrutinizer-ci.com/g/carvalhoviniciusluiz/mongoose-devise/badges/quality-score.png?b=master\n[coverage-url]: https://scrutinizer-ci.com/g/carvalhoviniciusluiz/mongoose-devise/?branch=master\n[npm-image]: https://img.shields.io/npm/v/mongoose-devise.svg?style=flat\n[npm-url]: https://npmjs.org/package/mongoose-devise\n\n### Requires:\nNode ``\u003e8.0.0``.\n\nMongoose ``\u003e5.0.0``.\n\n## Usage\n\nStandard installation of the plugin:\n\n```js\nconst mongoose = require('mongoose')\nconst devise = require('mongoose-devise')\n// or\n// const { devise } = require('mongoose-devise')\n\nconst UserSchema = new mongoose.Schema({})\nUserSchema.plugin(devise)\n\nmongoose.model('User', UserSchema)\n```\n\n__IMPORTANT__\n* only the most common methods are documented. For more information check the tests\n* in all cases, the `opts` parameter will be used to pass some configuration to the `sendNotification` method.\n\n## Registerable\n\nmodule that allows you to register an access account or, disable a registered account.\n\n#### `#register(credentials, opts)` :\n\na static method used to register credentials. It will return the registered user or the corresponding errors of the registration attempt.\n\n```js\nconst faker = require('faker')\n\nUser.register({\n  email: faker.internet.email(),\n  password: faker.internet.password()\n})\n.then(user)\n.catch(error)\n```\n\n#### `#unregister(beforeUnregister, afterUnregister)` :\n\nan instance method that lets you unregister (destroy a user). It receives two callbacks the parameter, one that executes before and the other after the save the object.\n\n```js\nuser.unregister(\n  function () {\n    // something before..\n  },\n  function () {\n    // something later\n  }\n)\n// #=\u003e true\n```\n\n__NOTE__ The implementation currently assigns the value of `unregisteredAt` to the current date.\n\n## Confirmable\n\n__TIP__ identifiable by the flag `account_confirmation`.\n\nmodule that verifies whether an account has already been confirmed or conveys instructions for confirmation.\n\n#### `#confirm(confirmationToken)` :\n\nthis static method receives a valid `validationToken` string to be able to confirm the unconfirmed record. Returns a user or the errors.\n\n```js\nUser.confirm('confirmation-token-valid')\n  .then(user)\n  .catch(error)\n```\n\n#### `#confirm()` :\n\ninstance method that confirms the account registration. Returns a boolean or errors in the process.\n\n##### Examples\n\n```js\nuser.confirm()\n  .then(isConfirmed)\n  .catch(error)\n```\n\n#### `#isConfirmed()` :\n\nverifies whether a user is confirmed or not.\n\n##### Examples\n\n```js\nuser.isConfirmed()\n// #=\u003e true\n```\n\n## Authenticable\n\nauthenticatable module, responsible for hashing the password and validating the authenticity of a user while signing in.\n\n\n#### `#authenticate(password, opts)` :\n\nauthenticates the user's instance from a password passed by parameter. If no errors are processed, a boolean will be returned.\n\n##### Examples\n\n```js\nuser.authenticate('secret')\n  .then(isAuthenticated)\n  .catch(error)\n```\n\n#### `#authenticate(credentials, opts)` :\n\na static method which takes in credentials in the format:\n\n```js\nconst faker = require('faker')\n\nconst credentials = {\n  email: faker.internet.email(),\n  password: faker.internet.password()\n}\n```\n\nwhere a valid `email` and `password` corresponding to a database user must be reported. At the end,\nthe user of the provided credentials will be returned, otherwise the corresponding errors.\n\n##### Examples\n\n```js\nUser.authenticate(credentials)\n  .then(user)\n  .catch(error)\n```\n\n#### `#validPassword(password)` :\n\nan instance method which takes in a plain string password and compare with the instance hashed password to see if they match.\n\n##### Examples\n\n```js\nuser.validPassword('secret')\n// #=\u003e true\n```\n\n## Recoverable\n\n__TIP__ identifiable by the flag `password_recovery`.\n\nmodule that establishes user password reset and sends resetting instructions.\n\n#### `#recover(recoveryToken, newPassword)` :\n\na static method used to retrieve an account bound to a `recoverToken` string. It receives two parameters, the first is the token and the second the new recovery password. Returns the linked user or any errors that occur.\n\n##### Examples\n\n```js\nUser.recover('recovery-token-valid', 'new-password')\n  .then(user)\n  .catch(error)\n```\n\n#### `#requestRecover(credentials, opts)` :\n\na model static method which is used to request account password recovery. Returns the user or any errors that occur.\n\n##### Examples\n\n```js\nUser.requestRecover({ email })\n  .then(user)\n  .catch(error)\n```\n\n## Lockable\n\n__TIP__ identifiable by the flag `account_recovery`.\n\nprovide a means of locking an account after a specified number of failed sign-in attempts `(defaults to 3 attempts)`.\n\n__NOTE__ user can unlock account via unlock instructions issued.\n\n#### `#lock(opts)` :\n\nan instance method that is used to lock an account. When invoked, it will check if the number of\n`failedAttempts` is greater than the configured `maximum allowed login attempts`,\nif so the account will get locked by setting `lockedAt` to the current timestamp.\n\n##### Examples\n\n```js\nuser.lock()\n  .then(isLocked)\n  .catch(error)\n```\n\n#### `#isLocked()` :\n\nverifies whether a user is locked or not.\n\n##### Examples\n\n```js\nuser.isLocked()\n// #=\u003e true\n```\n\n#### `#unlock(unlockToken)` :\n\na static method that unlocks a locked account with the provided `unlockToken` string.\n\n* If the token expires, the new `unlockToken` will be generated.\n* If the token is valid, the locked account will be unlocked and the `unlockedAt` attribute will be set to the current date and time.\n`failedAttempts` will be set to 0.\n\n##### Examples\n\n```js\nUser.unlock('unlock-token-valid')\n  .then(user)\n  .catch(error)\n```\n\n## Trackable\nprovide a means of tracking user signin activities.\n\n#### `track(ipAddress)` :\nthis is the instance method that will update the tracking details. Optionally receives a valid ip string.\n\n```js\nuser.track()\n```\n\n## Sending Notifications\n\nthe default implementation of `mongoose-devise` to send notifications is simple. This is because there are different use case(s) when it comes on sending notifications.\n\ndue to that reason, `mongoose-devise` requires that your model implements `sendNotification method` which accept `record`, `action`, `done` as its argurments.\n\n#### `record` :\n\nrefer to the current user model instance.\n\n#### `action` :\n\nrefer to the type of notifcation to be sent. There are just three types which\nare `account_confirmation`, `account_recovery` and `password_recovery` which are sent\nwhen new account is registered, when an account is locked and need to be unlocked and when account is requesting\nto recover the password respectively.\n\n#### `done` :\n\nis the callback that you must call after finishing sending the notification. By default this callback will update the notification send details based on the usage.\n\n* all the methods that accept the `opts` parameter, pass this parameter to the callback `done`\n\n##### Examples\n\n```js\nconst UserSchema = new Schema({})\n\n// override send method i.e your notification sending: email, sms, etc\nschema.methods.sendNotification = function (record, action, done) {\n  done(opts =\u003e {\n    // const host = isObject(opts) \u0026\u0026 (isObject(opts.req) \u0026\u0026 opts.req.isSecure())\n    //   ? 'https'\n    //   : 'http' + '://' + uri\n\n    switch (action) {\n      // if we send `confirmation email`\n      case 'account_confirmation':\n        console.log('Action type: %s.\\nRecord: %s \\n', action, JSON.stringify(record))\n        break\n\n      // if we send `account recovery`\n      case 'password_recovery':\n        console.log('Action type: %s.\\nRecord: %s \\n', action, JSON.stringify(record))\n        break\n\n      // if we send `account locked` information\n      case 'account_recovery':\n        console.log('Action type: %s.\\nRecord: %s \\n', action, JSON.stringify(record))\n        break\n\n      default:\n        console.log('mailer', 'Template not found')\n    }\n  })\n}\n```\n\n#### Sending issues\n\nIt is recommended to use job queue like [kue](https://github.com/Automattic/kue) or [bull](https://github.com/OptimalBits/bull) when implementing your send to reduce your API response time.\n\n### Custom messages\n\n`mongoose-devise` uses messages to customize your application, you can configure the message definition variables manually\n\nIt is recommended to use an internalizer such as [i18nex](https://www.i18next.com/) or [node-i18n](https://github.com/mashpie/i18n-node) when implementing the support layer to the language.\n\n```js\n// custom to pt-BR, default is en-US.\nuserSchema.plugin(devise, {\n  authenticationFieldMessage: 'Endereço de email inválido',\n  // authenticable\n  authenticatorError: 'O {{field}} não foi informada',\n  passwordError: 'Senha não informada',\n  authenticatorNotExistError: 'Esse email não existe',\n  credentialsNotExistError: 'Credênciais incorretas',\n\n  // confirmable\n  invalidConfirmationTokenError: 'Token de confirmação inválido',\n  confirmationTokenExpiredError: 'Token de confirmação expirou',\n  accountNotConfirmedError: 'Conta não confirmada',\n\n  // registerable\n  definitionsNotFoundError: 'Dados básicos não encontrados',\n\n  // lockable\n  accountLockedError: 'Conta bloqueada. Verifique as instruções de desbloqueio enviadas para o seu email',\n  invalidUnlockTokenError: 'Token de desbloqueio inválido',\n  unlockTokenExpiredError: 'Token de desbloqueio expirado',\n\n  // recoverable\n  accountWithoutAssociationError: 'Não existe conta associada a esse email',\n  invalidRecoveryTokenError: 'Token de recuperação recusado',\n  recoveryTokenExpiredError: 'Token de recuperação expirado'\n})\n```\n\n\u003e See complete MVC solution based on Restify engines;\n\n\u003e [Restify Devise](https://github.com/carvalhoviniciusluiz/restify-devise)\n\n### Thanks\n\nInspired by [irina](https://github.com/lykmapipo/irina).\n\n### Test\n* Install all development dependencies\n```sh\nnpm install\n```\n* Then run test\n```sh\nnpm test\n```\n\n### License\n\n[MIT](http://opensource.org/licenses/MIT)\n\nCopyright (c) 2018-present\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcarvalhoviniciusluiz%2Fmongoose-devise","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcarvalhoviniciusluiz%2Fmongoose-devise","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcarvalhoviniciusluiz%2Fmongoose-devise/lists"}