1

私の Sinatra アプリケーションには単純な認証システムがあります。ユーザーが正しいログインとパスワードを入力すると、基本的session[:user_id]にユーザーのIDに設定されます。それだけです。今のところこれで十分です。別のソリューションは使用しません。

私がする必要があるのは、「私を覚えている」オプションを作ることです。では、単純なソリューションでこれを行うにはどうすればよいですか? 私はそれを理解することはできません。

4

2 に答える 2

5

私が行った方法は次のとおりです (認証には OmniAuth を使用し、ユーザー ストレージには Mongoid を使用しています。ログイン フォームは AJAX を使用するため、応答は JSON です)。"Remember me" チェックボックスに対応する HTML フィールドは "remember" と呼ばれます:

post '/auth/identity/callback' do
  u = User.find(env['omniauth.auth']['uid'])
  session[:user] = u
  session.options[:expire_after] = 2592000 unless params['remember'].nil? # 30 days
  [200, {:msg => 'User logged in'}.to_json]
end

ここで重要なのはsessions.options[:expire_after]ラインです。:expire_after を設定しない場合、ブラウザの終了時に Cookie は自動的に削除されます。設定すると、Cookie はブラウザーの再起動後も保持され、指定された秒数の間保持されます。

于 2013-04-25T14:59:31.937 に答える
0

そのためにシナトラ Cookie を活用できます。おそらく「remember_me」パラメーターをチェックし、存在する場合はユーザー ID を Cookie に割り当てます。たとえば、これは Rails の例ですが、意図は同じです。

def login_user
    begin
      @user = User.authenticate(params)
      if @user
        if params[:remeberme] 
          cookies.permanent[:user_id] =  @user.id.to_s
        else
          cookies[:user_id] = @user.id.to_s
        end
      end
    rescue Exception => e
      @errors = [e]
    end
  end

シナトラクッキー

于 2013-03-01T14:33:23.607 に答える