2011-07-12 4 views
1

Rails 3のログインシステムを作成しようとしています。ここでは、ビューからだけでなくコントローラ/モデルレベルからログインしたユーザーにアクセスできます。その理由は、ログインしているユーザーがログインしていないユーザーとは異なる機能を実行できる権限システムに応じて機能を調整したいからです。ログインしたユーザーにアクセスする方法3

これまではrailstutorial.com, chapter 9からログインシステムを実装しようとしました。

私はログインシステムをビューからのみ使用すると機能します。しかし、コントローラを介してシステムを使用しようとすると、エラーundefined method 'cookie_jar' for nil:NilClassが発生します。

ログインしているユーザーをコントローラから識別できる認証システムを作成するための支援やベストプラクティスをご利用いただきありがとうございます。

答えて

4

ここでの最良のアドバイスはおそらく「しない」ことです。認証システムが必要な場合は、Deviseのようなものを使用してください。悪意のある人が入ることができないように多くの時間と労力を費やしています。

異なるユーザーに異なる機能を実行させたい場合は、そのためには、cancanまたはACL

のようなものがほしいと思っています。そして、ログインしたユーザーにモデルレベルでアクセスしたいのですか?ここでも、ベストプラクティスは「しない」です。モデルは、現在ログインしているユーザーに関心がないはずです。つまり、コントローラの問題です。

(つまり、ルールが壊れることがあります。たとえば、監査証跡を作成していて、変更したユーザーに関する情報を保存する必要がある場合、現在ログインしているユーザーをモデルに渡すなど最良の答え....)

そして、あなたは本当に、本当に最初からすべてをしたい場合は、最終的に、this railscast

+0

誰かが監査証跡と言いましたか? [acts_as_audited](https://github.com/collectiveidea/acts_as_audited) – diedthreetimes

+0

まあ、私はあなたがベストプラクティスから逃げるよう誘惑されるかもしれない種類の事例の例としてそれを意味しました - しかしそうです。私は彼らがどのように問題を処理するのだろう - 一日を見なければならない... – chrispanda

+0

ああありがとう。私は宝石をチェックします。最初の短い見た目はとても素敵でした。 –

0

を見てみrailscastエピソードで述べたように、非常に簡単な方法はそれを行うことです:http://railscasts.com/episodes/20-restricting-access 画面のキャストで説明したように、プラグインacts as authenticated(http://www.railsrocket.com/acts_as_authenticated-plugin)をすべてのあなたのユーザーモデルのニーズ。

+1

このキャストはかなり古いです。最近では、CanCan(https://github.com/ryanb/cancan/)を認可のために使用する方が柔軟性があります。そしてそれはあまり複雑ではありません。 – RocketR

+0

興味深いことに、cancanのプラグインは、すべてのrailscastの著者Ryan Batesの創造です! – brayne

0

すべてがチュートリアルに従って行われた場合は、コントローラとビューの両方からcurrent_userを取得できるはずです。 Ryan Batesによるasciicasts.comの認証に関する別のチュートリアルもあります。実際にRailsを起動している場合は、それを調べることができますが、実際のアプリケーションでは、完全にテストされ、常に進化しているDeviseまたはAuthLogicを使用することを強くお勧めします。

関連する問題