我有一个登录部分,一旦有人成功登录,我希望它返回到他们的个人资料用户#show。你会如何制作routes.rb呢?
答案 0 :(得分:1)
我假设你有一些东西负责登录和管理会话。
假设您有一个会话控制器,则会创建一个新的会话登录。 (登录表单创建一个新会话,如果用户名 - 密码组合正确,则会向会话的create方法发送帖子
redirect_back_or user
你的routes.rb有
resources :users
这是会话控制器的示例
class SessionsController< ApplicationController的 def new @title =“登录” 端
def create
user = User.authenticate(params[:session][:name],
params[:session][:password])
if user.nil?
flash.now[:error] = "Invalid email/password combination."
@title = "Sign in"
render 'new'
else
sign_in user
redirect_to user
end
end
def destroy
sign_out
redirect_to root_path
end
end
答案 1 :(得分:0)
您不需要在routes.rb中执行此操作。只需在控制器中编程该行为。
在登录控制器中设置redirect_to show_user_path(@user)
如果您要配置路线以便'/'为'/ user / show',那么:
root :to=>'user#show'
答案 2 :(得分:0)
我不知道我是否完全理解这个问题,但我的第一个想法是我不会在routes.rb中管理这个问题。我假设你至少有:
[controller]/[some login type action]
users/show
作为可行的行动。除此之外,我将使用重定向从您成功登录后转移到users / show操作。
您可以查看redirects上的此链接以及layouts and rendering上的此链接以获取更多信息......
答案 3 :(得分:0)
我明白了。在我的routes.rb中我有
match '/account/:id', :to => 'users#show', :as => 'account'
在我的用户会话控制器中,如果他们成功登录,则会创建@current_user_session。然后创建@current_user。然后我将成功登录路由到routes_path(@current_user),如routes.rb中所定义
def create
@user_session = UserSession.new(params[:user_session])
respond_to do |format|
if @user_session.save
@current_user_session = UserSession.find
@current_user = current_user_session && current_user_session.record
format.html { redirect_to(account_path(@current_user), :notice => 'Successfully logged in.') }
format.xml { render :xml => @user_session, :status => :created, :location => @user_session }
else
format.html { render :action => "new" }
format.xml { render :xml => @user_session.errors, :status => :unprocessable_entity }
end
end
end
此时创建@current_user是否有任何缺陷?或者,
中的任何安全漏洞