14 changed files with 184 additions and 58 deletions
@ -0,0 +1,20 @@ |
|||
<div class="container mt-5"> |
|||
<h2 class="mb-4">Bestätigungs‑Link erneut senden</h2> |
|||
|
|||
<%= form_with(scope: resource_name, url: password_path(resource_name), local: true) do |f| %> |
|||
|
|||
|
|||
<div class="mb-3"> |
|||
<%= f.label :email, 'E‑Mail Adresse', class: 'form-label' %> |
|||
<%= f.email_field :email, autofocus: true, class: 'form-control', placeholder: 'Ihre E‑Mail' %> |
|||
</div> |
|||
|
|||
<div class="mt-4"> |
|||
<%= f.submit 'Link senden', class: 'btn btn-primary w-100' %> |
|||
</div> |
|||
<% end %> |
|||
|
|||
<div class="mt-3 text-center"> |
|||
<%= link_to 'Zurück zur Anmeldung', new_session_path(resource_name), class: 'btn btn-link' %> |
|||
</div> |
|||
</div> |
|||
@ -0,0 +1,32 @@ |
|||
<div class="container mt-5"> |
|||
<h2 class="mb-4">🔐 Passwort zurücksetzen</h2> |
|||
|
|||
<%= devise_error_messages! %> |
|||
|
|||
<%= form_with(scope: resource_name, url: password_path(resource_name), method: :put, local: true) do |f| %> |
|||
<%= f.hidden_field :reset_password_token, value: params[:reset_password_token] %> |
|||
|
|||
<div class="mb-3"> |
|||
<%= f.label :email, 'E‑Mail Adresse', class: 'form-label' %> |
|||
<%= f.email_field :email, autofocus: true, class: 'form-control', placeholder: 'Ihre E‑Mail' %> |
|||
</div> |
|||
|
|||
<div class="mb-3"> |
|||
<%= f.label :password, 'Neues Passwort', class: 'form-label' %> |
|||
<%= f.password_field :password, autocomplete: "new-password", class: 'form-control' %> |
|||
</div> |
|||
|
|||
<div class="mb-3"> |
|||
<%= f.label :password_confirmation, 'Passwort bestätigen', class: 'form-label' %> |
|||
<%= f.password_field :password_confirmation, autocomplete: "new-password", class: 'form-control' %> |
|||
</div> |
|||
|
|||
<div class="mt-4"> |
|||
<%= f.submit 'Passwort aktualisieren', class: 'btn btn-primary w-100' %> |
|||
</div> |
|||
<% end %> |
|||
|
|||
<div class="mt-3 text-center"> |
|||
<%= link_to 'Zurück zur Anmeldung', new_session_path(resource_name), class: 'btn btn-link' %> |
|||
</div> |
|||
</div> |
|||
@ -0,0 +1,20 @@ |
|||
<div class="container mt-5"> |
|||
<h2 class="mb-4">Passwort vergessen?</h2> |
|||
|
|||
<%= form_with(scope: resource_name, url: password_path(resource_name), local: true) do |f| %> |
|||
|
|||
|
|||
<div class="mb-3"> |
|||
<%= f.label :email, 'E‑Mail Adresse', class: 'form-label' %> |
|||
<%= f.email_field :email, autofocus: true, class: 'form-control', placeholder: 'Ihre E‑Mail' %> |
|||
</div> |
|||
|
|||
<div class="mt-4"> |
|||
<%= f.submit 'Zugangsdaten senden', class: 'btn btn-primary w-100' %> |
|||
</div> |
|||
<% end %> |
|||
|
|||
<div class="mt-3 text-center"> |
|||
<%= link_to 'Zurück zur Anmeldung', new_session_path(resource_name), class: 'btn btn-link' %> |
|||
</div> |
|||
</div> |
|||
@ -1,53 +1,63 @@ |
|||
<!DOCTYPE html> |
|||
<html> |
|||
<head> |
|||
<meta charset="utf-8"> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1"> |
|||
<title>Praktikumsuhr</title> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1"> |
|||
|
|||
<!-- Bootstrap CSS --> |
|||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet"> |
|||
<%= csrf_meta_tags %> |
|||
<%= csp_meta_tag %> |
|||
|
|||
<!-- Flatpickr Theme --> |
|||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css"> |
|||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/themes/material_blue.css"> |
|||
|
|||
<!-- Custom Styles (optional) --> |
|||
<%= stylesheet_link_tag "application", "data-turbo-track": "reload" %> |
|||
|
|||
<!-- JS: Bootstrap Bundle (inkl. Popper) --> |
|||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js" defer></script> |
|||
|
|||
|
|||
<!-- Flatpickr JS --> |
|||
<script src="https://cdn.jsdelivr.net/npm/flatpickr"></script> |
|||
|
|||
<!-- JS: Flatpickr Init --> |
|||
<script defer> |
|||
document.addEventListener("DOMContentLoaded", function () { |
|||
flatpickr(".flatpickr", { |
|||
|
|||
dateFormat: "d.m.Y", |
|||
allowInput: true |
|||
}); |
|||
}); |
|||
</script> |
|||
|
|||
<!-- JavaScript from Rails --> |
|||
<%= javascript_include_tag "application", "data-turbo-track": "reload", defer: true %> |
|||
</head> |
|||
|
|||
|
|||
|
|||
<body class="container mt-4"> |
|||
<% if notice %><div class="alert alert-success"><%= notice %></div><% end %> |
|||
<% if alert %><div class="alert alert-danger"><%= alert %></div><% end %> |
|||
|
|||
<% if user_signed_in? %> |
|||
<p class="text-end"> |
|||
Eingeloggt als <%= current_user.email %> | |
|||
<%= link_to "Profil", edit_user_registration_path %> | |
|||
<%= link_to "Admin", admin_root_path %> | |
|||
<%= link_to "Logout", destroy_user_session_path, method: :delete, data: { turbo: false } %> |
|||
</p> |
|||
<% end %> |
|||
|
|||
<%= yield %> |
|||
<body> |
|||
<nav class="navbar navbar-expand-lg navbar-light bg-light mb-4"> |
|||
<div class="container"> |
|||
<%= link_to "Praktikumsuhr", root_path, class: "navbar-brand" %> |
|||
|
|||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent"> |
|||
<span class="navbar-toggler-icon"></span> |
|||
</button> |
|||
|
|||
<div class="collapse navbar-collapse" id="navbarSupportedContent"> |
|||
<ul class="navbar-nav ms-auto mb-2 mb-lg-0"> |
|||
<% if user_signed_in? %> |
|||
<li class="nav-item"> |
|||
<%= link_to "Einträge", entries_path, class: "nav-link" %> |
|||
</li> |
|||
<li class="nav-item"> |
|||
<%= link_to "Profil", edit_user_registration_path, class: "nav-link" %> |
|||
</li> |
|||
<li class="nav-item"> |
|||
<%= link_to "Abmelden", destroy_user_session_path, method: :delete, data: { turbo: false }, class: "nav-link" %> |
|||
</li> |
|||
<% else %> |
|||
<li class="nav-item"> |
|||
<%= link_to "Anmelden", new_user_session_path, class: "nav-link" %> |
|||
</li> |
|||
<li class="nav-item"> |
|||
<%= link_to "Registrieren", new_user_registration_path, class: "nav-link" %> |
|||
</li> |
|||
<% end %> |
|||
</ul> |
|||
</div> |
|||
</div> |
|||
</nav> |
|||
|
|||
<div class="container"> |
|||
<% if notice %> |
|||
<div class="alert alert-success"><%= notice %></div> |
|||
<% end %> |
|||
<% if alert %> |
|||
<div class="alert alert-danger"><%= alert %></div> |
|||
<% end %> |
|||
|
|||
<%= yield %> |
|||
</div> |
|||
</body> |
|||
</html> |
|||
@ -0,0 +1,9 @@ |
|||
class AddConfirmableToUsers < ActiveRecord::Migration[7.1] |
|||
def change |
|||
add_column :users, :confirmation_token, :string |
|||
add_index :users, :confirmation_token |
|||
add_column :users, :confirmed_at, :datetime |
|||
add_column :users, :confirmation_sent_at, :datetime |
|||
add_column :users, :unconfirmed_email, :string |
|||
end |
|||
end |
|||
@ -0,0 +1,9 @@ |
|||
class ConfirmAllExistingUsers < ActiveRecord::Migration[7.1] |
|||
def up |
|||
User.update_all(confirmed_at: Time.current) |
|||
end |
|||
|
|||
def down |
|||
User.update_all(confirmed_at: nil) |
|||
end |
|||
end |
|||
Loading…
Reference in new issue