私はHerokuでSinatraアプリを実行しています。私はユーザーのためにクッキーを正しく設定するのに非常に苦労しました。私は数日間の例とドキュメントを見てきましたが、問題を解決することはできません。私は電子メールとパスワードでユーザのログインをしたいと思っています。ログインが成功した場合は、設定した時間が経過した後に有効期限が切れるCookieを作成します。ユーザーがブラウザを閉じて再オープンした場合、または新しいコードをHerokuにプッシュした場合、ユーザーはログインしたままにしておきたい。私はそれがクッキーの通常の使用であると思うので、誰かがそれを手伝ってくれるなら、私はとても感謝しています。クッキーを使用してセッションを正しく開始し、保存し、ラックセッションを使用してSinatraアプリにアクセスする方法
ここに私はと思っています私はポスト '/ログイン'ルートを設定するはずです。
post '/login/?' do
#do_login is a helper method which checks if the user's credentials are correct
if do_login
use Rack::Session::Cookie, :key => 'rack.session',
:domain => 'www.Feistie.com',
:path => '/',
:expire_after => 2592000,
:secret => 'a_30_character_key',
:user_id => params[:user_id]
end
end
正しくても、私はそれを本当に理解していません。 :キーとは何ですか?私は仮定しています:ドメインは私のように私のウェブサイトに設定する必要があります。パス:パス?なぜですか:パスは '/'に設定されていますか?実際に私のRackアプリの秘密鍵を設定する場所はありますか?私は、クッキーのセキュリティがどのように機能するかについては完全にはわかりません。私はまた私が追加することができるかどうかわからない:user_idをハッシュに私がやったように。
次に、次の部分でヘルパー「logged_in?」を設定しています。誰かがログインしているかどうかを確認する
def logged_in?
!session.nil?
end
これはおそらく間違っていますが、私は試してみると思いました。
また、現在のユーザーが実際に誰であるかを確認する必要があります。私はsession[:user_id] == @user.id
かこれに類するものでこれをやっていました。私が持っている主な質問は、どのように私は:cookieのuser_id値にアクセスするのですか?
最後にログアウトします。
post '/logout/?' do
session.clear
end
もし皆さんが私にこのすべてを踏まえれば、素晴らしいことになるでしょう!事前に感謝し、さらに情報が必要な場合は、私は提供して喜んでいただきます。
だけ考えました。 user_idではなく、ランダムなトークン( 'SecureRandom.hex'かもしれない)を各ユーザに与える価値があるかもしれません。 – fatnic
少し進んでいます。ありがとう。まず、request.cookiesでなければなりません。たぶん私はそれを編集することができます、私は編集ボタンを参照してください。したがって、次のように入力します:response.delete_cookie 'user_id' response.set_cookie "user_id"、{:value => "some data"、:expires =>(Time.now + 52 * 7 * 24 * 60 * 60)} puts request.cookies ['user_id']と応答はちょうど "some data"です。私は応答としてハッシュ全体を取得することはできません。何か案は?ありがとう! – wuliwong