1

レール開発を学ぶことは、通常、人々の時間を無駄にするよりも答えを探すことを好みますが、これは一晩中私の頭を悩ませてきました.

基本的に、ユーザー依存のビューをgithubなどで提示しようとしています.

ここに記載されている指示に従おうとしています: http://collectiveidea.com/blog/archives/2011/05/31/user-centric-routing-in-rails-3/

現時点での私の認証は、セッション、私の sessions_crontroller.rb を使用する Railscast の「Authentication from Scratch - modified」からのものです。

class SessionsController < ApplicationController
    def new
    end

    def create
      user = User.find_by_email(params[:email])
      if user && user.authenticate(params[:password])
        session[:user_id] = user.id
        redirect_to root_url, notice: "Logged in!"
      else
        flash.now.alert = "Email or password is invalid"
        render "new"
      end
    end

    def destroy
      session[:user_id] = nil
      redirect_to root_url, notice: "Logged out!"
    end
end

そして私のroutes.rb:

C::Application.routes.draw do

root :to => "static_pages#home", :constraints => LoggedInConstraint.new(false)
root :to => "users#show", :constraints => LoggedInConstraint.new(true)

resources :users
resources :sessions

私の理解によると、私は Cookie を使用していないため、そのブログ投稿の下の最後のコメントでは、request.cookies.key?("user_token") の代わりに request.session[:your_key] を使用することを推奨していますが、ログインすると、まだ取得されますstatic_pages#home? 誰かがこのトピックに光を当てることができれば、私はそれを非常に感謝しています.

また、フォーマット エラーなどについてもお詫び申し上げます。これは、stackoverflow に関する最初の質問です。

再度、感謝します!

4

1 に答える 1

1

正確な質問についてはわかりませんが、これに似たようなことをしただけなので、私のコードが役立つかもしれません:

私のルート:

# Except from config/routes.rb
require File.expand_path("../../lib/role_constraint", __FILE__)

MyApp::Application.routes.draw do
  mount Resque::Server, :at => "/resque", :constraints => RoleConstraint.new('admin')
  ...
  ...
  ...

私の制約:

# lib/role_constraints.rb
class RoleConstraint < Struct.new(:value)
  def matches?(request)
    request.session[:role] == value
  end
end

私のセッションコントローラー:

# app/controllers/sessions_controller.rb
class SessionsController < ApplicationController
  before_filter :require_user, :only => :destroy
  def new
  end

  def create
    user = User.find_by_username(params[:username])
    if user && user.authenticate(params[:password])
      session[:user_id] = user.id

      # Just for /resque
      # Not secure - if you change a user's role, it will not be updated here
      # until they log out and log in again.
      session[:role] = user.role

      if user.email.nil?
        redirect_to user, :notice => "Please add your email address to your account"
      else
        redirect_to root_url, :notice => "Logged in!"
      end
    else
      flash.now.alert = "Invalid email or password"
      render "new"
    end
  end

  def destroy
    session[:user_id] = nil
    session[:current_project_id] = nil
    redirect_to root_url, :notice => "Logged out!"
  end
end
于 2012-05-17T19:46:08.570 に答える