Volt Introduction and Docs

ユーザー

ユーザーは、多くの Web アプリケーションにおいて中心となるコンポーネントの1つです。Volt はユーザーをフレームワークに取り込むことで標準化しています。

メモ

Voltのユーザーに関する機能は開発中の段階です。サードパーティのサービス経由でログインできるように、omniauth のサポートを計画中です。現在は E メールまたはユーザー名とパスワードのオプションのみが提供されています。

ユーザーを利用する

Volt は volt-user-templates gem を最初から組み込んでいます。まず、ユーザーの使いかたについて見てみましょう。その次に、独自のサインアップページとログインページの作成方法について説明します。

volt-user-template はサインアップとログインのためのテンプレートを提供します。それらは、デフォルトのルーティングテンプレートによってレンダリングされます。Volt は /signup/loginroutes.rb に定義しています。タグを使ってテンプレートのレンダリングをすることも可能です。詳しくは、volt-user-templates の readme を参照してください。

現在のユーザーモデルには Volt.current_user でアクセスすることができます。これは最初はnilを返しますが、サーバーからデータが取得でき次第、ユーザーのデータがリアクティブに更新されます。もしユーザーが返ってくるまで待つ必要がある場合には、Volt.fetch_current_userを利用することができます。これは、ユーザーが読み込まれたときに解決するpromiseを返します。もしユーザーがログインしていなれければnilで解決します。

制限付きモデル

Volt は、モデルの変更をある特定のユーザーのみに制限するためのヘルパーを備えています。詳細はパーミッション を参照してください。

ログイン

ユーザーのログインは以下を実行します:

Volt.login(login, password)

上記において、login は、ユーザー名か E メールのいずれかを使うように設定することができます。Volt.loginpromise を返し、ログインに成功した場合に解決 (resolve) され、ログインに失敗した場合には、エラーメッセージとともに失敗 (fail) します。

Volt.login(email, password).then do
  # ログイン成功時はリダイレクト
  go '/dashboard'
end.fail do |error|
  # ログイン失敗 (エラーあり)
  flash._errors << error
end

ログアウト

ユーザーのログアウトは以下を実行します:

Volt.logout

これは即座に実行され、Volt.current_user に対して変更 (change) イベントをトリガーします。

ユーザーとしてログイン

タスク、もしくは HttpController において、以下のようにすると直接ユーザーとしてログインすることができます。

login_as(user)

このとき、user は User のインスタンスを指定します。

ユーザーを作成する

ユーザーを作成する例は volt-user-templates を見てください。

Volt は Volt::User クラスを備えており、すべてのモデルが継承することができます。デフォルトでは、Volt は、app/main/models/user.rb で User モデルを提供しています。

ログインのために Volt::User がデフォルトで使うのは email プロパティですが、代わりに username を使うようにアプリケーションを構成することもできます。そのためには、config/app.rb に以下を追加してください。

config.public.auth.use_username = true

Volt::User は、emailusername に対してのバリデーションも提供しています。パスワードは password プロパティに格納されます。パスワードは bcrypt を使ってハッシュ化され、 hashed_password に格納されます。hashed_password を直接扱うことがあってはいけません。

ユーザーの作成には、通常のストアコレクションを利用します:

def index
  self.model = store._users.buffer
end

ユーザー作成時のエラーを表示するためには、volt-fields を利用することができます。

require_login

Volt::ModelController には require_login メソッドが用意されており、ユーザーがログインしているかをチェックし、ログインしていなければログインページにリダイレクトさせることができます。また、ログインのフラッシュメッセージを表示することもできます。

:require_login の before action を利用すれば、特定のアクションのみでログインを要求することが可能です。

module Main
  class MainController < Volt::ModelController
    before_action :require_login

    def index
    end
  end
end

require_loginにはカスタムメッセージを設定することが可能です。また、フラッシュメッセージを表示させたくない場合にはnilを指定してください。

module Main
  class MainController < Volt::ModelController
    before_action do
      require_login('Login or else')
    end

    def index
    end
  end
end