ホームページ > ウェブフロントエンド > htmlチュートリアル > デザインの奥深さを明らかにする、パート 1

デザインの奥深さを明らかにする、パート 1

王林
リリース: 2023-08-26 22:25:16
オリジナル
527 人が閲覧しました

揭示设计的深度,第 1 部分

Rails での画像アップロードに関する以前の記事のいくつかで、Devise について言及しましたが、詳しくは掘り下げませんでした。このチュートリアルでは、Devise について説明します。

###準備はできたか?はじめましょう!

設計の概要とモジュール

Devise は、Plataformatec の優秀なスタッフが Warden とともに構築した Rails 認証ソリューションです。 Devise はさまざまなモジュールを提供します:

    データベース検証可能: これにより、パスワードが暗号化されてデータベースに保存され、ログイン時にユーザーの信頼性が検証されます。
  • Omniauthable: これにより、OmniAuth サポートが Devise に追加されます。アプリのユーザーは、Facebook、Twitter、Google などのアカウントを使用してログインできるようになります。
  • 確認可能: アカウントの確認に役立つ手順が記載された電子メールが送信されます。
  • 回復可能: このモジュールは、ユーザーがパスワードを忘れて回復する必要がある場合に役立ちます。このようにして、ユーザーはパスワードをリセットできます。
  • 登録可能: ユーザー登録を処理します。ユーザーが自分のアカウントを編集および削除することもできます。
  • Rememberable: このモジュールを使用すると、Cookie を保存することで、アプリケーションがログイン ユーザーを記憶できるようになります。
  • 追跡可能: このモジュールは、ログイン数、タイムスタンプ、および IP アドレスの追跡に役立ちます。
  • Timeoutable: このモジュールは、一定期間非アクティブだったセッションを期限切れにする役割を果たします。
  • 検証可能: このモジュールを使用すると、電子メールとパスワードを検証できます。
  • ロック可能: これにより、追加のセキュリティ層が提供されます。有効にすると、ログイン試行が一定回数失敗した後にアカウントをロックできます。
デバイスの統合

このチュートリアルの目的として、Devise の動作を確認するために使用できる Rails アプリケーションを生成します。続けましょう!

rails 新しい設計アプリケーション -T

-T フラグは、デフォルトのテスト スイートを使用せずにアプリケーションを構築するように Rails に指示します。アプリケーション ディレクトリに移動し、次の gem を Gemfile に配置します。 リーリー

次に、追加した Devise と Bootstrap gem をインストールします。

バンドルインストール

app/assets/stylesheets/application.css ファイルの名前を app/assets/stylesheets/application.scss に変更し、次の行を追加します。 リーリー

app/assets/javascripts/application.js

ファイルを開き、bootstrap-sprockets が必要です。私のものは次のようになります: リーリー 次に、Rails コマンドを実行して Devise の構成ファイルをインストールする必要があります。これを行うには、次のコマンドを実行します:

rails デバイスの生成: インストール

このコマンドにより、端末上に次のものが生成されます。何が起こっているのかを理解するには、それを読む必要があります。

リーリー

このコマンドは 2 つのファイルも生成します。これらのファイルは

config

ディレクトリにあります。また、私たちが何をすべきかについてのヒントも与えてくれます。 アプリケーション レイアウト

app/views/layouts/application.html.erb

に移動し、次のようにします。 リーリー 開発環境のデフォルトの URL オプションを定義する必要があります。次のコードを

config/environments/development.rb

に追加します。 リーリー 次に、Devise の

User

モデルを作成する必要があります。これを行うにはターミナルを使用できます。

rails デバイス ユーザーの生成

これにより、

app/models

ディレクトリに user.rb ファイルが生成されます。生成されたファイルは次のようになります: リーリー これには、上で述べたデフォルトのモジュールが含まれていることがわかります。実行するコマンドは、デバイスのルートを追加することにより、

config/routes.rb

ファイルも変更します。ぜひチェックしてみてください。 この時点で、データベースを移行する必要があります。これを行うには、次のコマンドを実行します:

rake データベース: 移行

デバイスを使用して認証する

次に、

PagesController

を作成し、Devise 認証をラップする必要があります。これにより、権限のないユーザーがページを閲覧できなくなります。

rails コントローラー ページ インデックスの生成

ルート ファイルを開き、アプリケーションのルート ディレクトリを設定します。

リーリー

PagesController

を開き、index および new ページの認証を追加します。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:erb;toolbal:false;">#app/controllers/pages_controller.rb class PagesController &lt; ApplicationController before_action :authenticate_user!, only: [:index, :new] def index end def new end end </pre><div class="contentsignin">ログイン後にコピー</div></div> <p>代码显示 <code class="inline">indexnew 页面仅可供注册用户访问。打开终端并启动 rails 服务器。将浏览器指向 http://localhost:3000,您将自动重定向到 Devise 登录页面。

不使用电子邮件登录

登录 Devise 的默认方式涉及使用电子邮件地址和密码。如果您想让用户能够使用其唯一的用户名登录怎么办?如果那是你想要的,那是可能的。让我们看看如何。

运行命令:

rails 生成迁移 AddUsernameToUSers 用户名:string

这将在 users 表中为 username 添加一个新列。迁移您的数据库。

rake 数据库:migrate

您需要在视图中添加一个字段,用户可以在其中输入他们的用户名。当您转到 app/views 目录时,您将找不到任何呈现 Devise 视图的文件。这是因为 Devise 从其 gemset 加载视图。要自定义它,您必须生成视图的副本。下面的命令发挥了魔力。

rails 生成设备:views

这将在您的 app/views 目录中生成一些文件夹和文件。

您将需要编辑用于登录、注册和更新用户信息的页面。只需将下面的代码块粘贴到各自的文件中即可。

注册

#app/views/devise/registrations/new.html.erb

<h2>Sign up</h2>

<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
  <%= devise_error_messages! %>

  <div class="form-group">
    <%= f.label :email %><br />
    <%= f.email_field :email, autofocus: true, class: "form-control" %>
  </div>

  <div class="form-group">
    <%= f.label :username %>
    <%= f.text_field :username, class: "form-control" %>
  </div>

  <div class="form-group">
    <%= f.label :password %>
    <% if @minimum_password_length %>
    <em>(<%= @minimum_password_length %> characters minimum)</em>
    <% end %><br />
    <%= f.password_field :password, autocomplete: "off", class: "form-control" %>
  </div>

  <div class="form-group">
    <%= f.label :password_confirmation %><br />
    <%= f.password_field :password_confirmation, autocomplete: "off", class: "form-control" %>
  </div>

  <div class="actions">
    <%= f.submit "Sign up", class: "btn btn-primary" %>
  </div>
<% end %>

<%= render "devise/shared/links" %>
ログイン後にコピー

编辑

#app/views/devise/registrations/edit.html.erb

<h2>Edit <%= resource_name.to_s.humanize %></h2>

<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %>
  <%= devise_error_messages! %>

  <div class="form-group">
    <%= f.label :email %><br />
    <%= f.email_field :email, autofocus: true, class: "form-control" %>
  </div>

  <% if devise_mapping.confirmable? && resource.pending_reconfirmation? %>
    <div>Currently waiting confirmation for: <%= resource.unconfirmed_email %></div>
  <% end %>

  <div class="form-group">
    <%= f.label :username %>
    <%= f.text_field :username, class: "form-control" %>
  </div>

  <div class="form-group">
    <%= f.label :password %> <i>(leave blank if you don't want to change it)</i><br />
    <%= f.password_field :password, autocomplete: "off", class: "form-control" %>
  </div>

  <div class="form-group">
    <%= f.label :password_confirmation %><br />
    <%= f.password_field :password_confirmation, autocomplete: "off", class: "form-control" %>
  </div>

  <div class="form-group">
    <%= f.label :current_password %> <i>(we need your current password to confirm your changes)</i><br />
    <%= f.password_field :current_password, autocomplete: "off", class: "form-control" %>
  </div>

  <div class="actions">
    <%= f.submit "Update", class: "btn btn-primary" %>
  </div>
<% end %>

<h3>Cancel my account</h3>

<p>Unhappy? <%= button_to "Cancel my account", registration_path(resource_name), data: { confirm: "Are you sure?" }, method: :delete %></p>

<%= link_to "Back", :back %>
ログイン後にコピー

登录

#app/views/devise/sessions/new.html.erb

<h2>Log in</h2>

<%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
  <div class="form-group">
    <%= f.label :username %><br />
    <%= f.text_field :username, autofocus: true, class: "form-control" %>
  </div>

  <div class="form-group">
    <%= f.label :password %><br />
    <%= f.password_field :password, autocomplete: "off", class: "form-control" %>
  </div>

  <% if devise_mapping.rememberable? -%>
    <div class="form-group">
      <%= f.check_box :remember_me %>
      <%= f.label :remember_me %>
    </div>
  <% end -%>

  <div class="actions">
    <%= f.submit "Log in", class: "btn btn-primary" %>
  </div>
<% end %>

<%= render "devise/shared/links" %>
ログイン後にコピー

使用文本编辑器导航至 app/controllers/application_controller.rb。您需要修改它以允许使用用户名。将其修改为如下所示:

#app/controllers/application_controller.rb

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception

  before_action :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    added_attrs = [:username, :email, :password, :password_confirmation, :remember_me]
    devise_parameter_sanitizer.permit :sign_up, keys: added_attrs
    devise_parameter_sanitizer.permit :account_update, keys: added_attrs
  end
end
ログイン後にコピー

现在用户可以使用他/她的用户名登录。此时,您的申请有一些不正确的地方。当用户登录时,无法退出。这不会带来良好的用户体验。我将向您展示如何解决这个问题。

在终端中,在 app/views 文件夹中创建一个名为 shared 的新目录。

mkdir app/views/shared
touch app/views/shared/_navigation.html.erb
ログイン後にコピー

您上面创建的文件是用于写入导航栏代码的部分文件。添加以下代码。

#app/views/shared/_navigation.html.erb

<nav class="navbar navbar-inverse">
  <div class="container">
    <div class="navbar-header">
      <%= link_to 'Tutsplus Devise', root_path, class: 'navbar-brand' %>
    </div>
    <div id="navbar">
      <ul class="nav navbar-nav">
        <li><%= link_to 'Home', root_path %></li>
      </ul>
      <ul class="nav navbar-nav pull-right">
        <% if user_signed_in? %>
          <li class="dropdown">
            <a class="dropdown-toggle" data-toggle="dropdown" href="#">
              <%= current_user.name %>
              <span class="caret"></span>
            </a>
            <ul class="dropdown-menu" role="menu">
              <li><%= link_to 'Profile', edit_user_registration_path %></li>
              <li><%= link_to 'Log out', destroy_user_session_path, method: :delete %></li>
            </ul>
          </li>
        <% else %>
          <li><%= link_to 'Log In', new_user_session_path %></li>
          <li><%= link_to 'Sign Up', new_user_registration_path %></li>
        <% end %>
      </ul>
    </div>
  </div>
</nav>
ログイン後にコピー

现在您需要在应用程序布局中呈现导航栏。打开 app/views/layouts/application.html.erb 并放入代码以呈现导航栏。

#app/views/layouts/application.html.erb

...
<div class="container-fluid">
  <%= render "shared/navigation" %>

  <p class="notice"><%= notice %></p>
  <p class="alert"><%= alert %></p>
</div>
...
ログイン後にコピー

结论

在本部分中,您学习了如何安装 Devise 并向页面添加身份验证。我还提到了一部分。我将在单独的教程中介绍这一点。

在下一部分中,我们将介绍一些比这更高级的领域。我希望这值得您花时间!

以上がデザインの奥深さを明らかにする、パート 1の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート