> For the complete documentation index, see [llms.txt](https://ploegert.gitbook.io/til/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ploegert.gitbook.io/til/programmy/rails/secure-passwords-with-rails-and-bcrypt.md).

# Secure Passwords With Rails And Bcrypt

If you are using [`bcrypt`](https://github.com/codahale/bcrypt-ruby) (at least version 3.1.7), then you can easily add secure password functionality to an [ActiveRecord](https://github.com/rails/rails/tree/master/activerecord) model. First, ensure that the table backing the model has a `password_digest` column. Then add [`has_secure_password`](https://api.rubyonrails.org/classes/ActiveModel/SecurePassword/ClassMethods.html) to your model.

```ruby
class User < ActiveRecord::Base
  has_secure_password

  # other logic ...
end
```

You can now instantiate a `User` instance with any required fields as well as `password` and `password_confirmation`. As long as `password` and `password_confirmation` match then an encrypted `password_digest` will be created and stored. You can later check a given password for the user using the `authenticate` method.

```ruby
user = User.find_by(email: user_params[:email])

if user.authenticate(user_params[:password])
  puts 'That is the correct password!'
else
  puts 'That password did not match!'
end
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ploegert.gitbook.io/til/programmy/rails/secure-passwords-with-rails-and-bcrypt.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
