# Login with Devise

## Set Up Devise

Follow these steps to configure Devise for user authentication in your Lightning Rails application.

### Configure Devise

Open the production.rb file at `config/environments/production.rb` and customize the host domain to match your production domain.

```
# config/environments/production.rb
  config.action_mailer.default_url_options = { host: 'example.com' } # Change this to your domain
```

### Configure email address for Devise::Mailer

```
  #config/initializers/devise.rb
  config.mailer_sender = 'please-change-me-at-config-initializers-devise@example.com'
```

### (Optional): Further Customization of Devise

To customize the User model by adding additional fields like `first_name` and `last_name`, follow these steps:

#### Generate a Migration

Generate a migration to add the new fields to your User model:

```
rails generate migration AddFieldsToUsers first_name:string last_name:string
```

#### Migrate the Database

Run the migration to update the database schema:

```
rails db:migrate
```

#### Permit Additional Parameters

To allow these new fields during sign-up and account update, you need to update the Devise parameters. Open or create the `app/controllers/application_controller.rb` file and add the following code:

```
class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:first_name, :last_name])
    devise_parameter_sanitizer.permit(:account_update, keys: [:first_name, :last_name])
  end
end
```

#### Update Views (Optional)

If you want users to input these additional fields during sign up and account editing, you must update the Devise views. Edit the `app/views/devise/registrations/new.html.erb` and `app/views/devise/registrations/edit.html.erb` files to include the new fields:

```
<div class="field">
  <%= f.label :first_name %>
  <%= f.text_field :first_name, autofocus: true %>
</div>

<div class="field">
  <%= f.label :last_name %>
  <%= f.text_field :last_name %>
</div>
```

This will allow users to provide their first and last names when they sign up or update their account information.

#### Freeing a Page from Authentication

To allow access to a specific action without requiring user authentication, you can use the following code in the corresponding controller:

```
class YourControllerName < ApplicationController
  # Freeing the action from authentication
  skip_before_action :authenticate_user!, only: :action_name

  def action_name
    # Your action code here
  end
end
```

Make sure to change "action\_name" to your new action name and "YourControllerName" to your new or existing controller name.

### Additional Resources

For more information and advanced configurations, we invite you to check out the official Devise repository on GitHub:

[Devise GitHub Repository](https://github.com/heartcombo/devise)

{% hint style="info" %}
If you care about your users, consider setting up magi links instead of passwords 😉 See the next feature: [Magic Links](https://docs.lightningrails.com/features-setup/magic-link-signup)
{% endhint %}
