所以我有一个rails + backbone.js应用程序,当用户点击登录链接时,他们无法通过点击标题中的链接导航到任何其他页面。标题有链接返回主页,当您将鼠标悬停在登录页面上的链接上时,浏览器左下方显示该链接指向" session / new"当链接应指向根URL时(" /#")。关于为什么会这样的想法?我的代码如下:
//application_controller.rb
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
helper_method :current_user, :logged_in?
private
def current_user
return nil unless session[:token]
@current_user ||= User.find_by_session_token(session[:token])
end
def sign_in(user)
session[:token] = user.reset_session_token!
end
def sign_out
session[:token] = nil
end
def logged_in?
return true unless session[:token].nil?
false
end
def ensure_sign_in
redirect_to new_session_url unless logged_in?
end
end
class SessionsController < ApplicationController
def new
end
def create
@user = User.find_by_credentials(params[:user][:username], params[:user][:password])
if @user
sign_in(@user)
redirect_to root_url
else
flash.now[:errors] = "Invalid username or password"
render :new
end
end
def destroy
sign_out
redirect_to root_url
end
end
// _ header.html.erb
<a class="navbar-brand" href= "#">Title
<!-- <img alt="Brand" src="http://createfunnylogo.com/logo/harrypotter/Expecto.jpg"
width="200" height="50"> -->
</a>
<form class="navbar-form navbar-left" role="search">
<div class="form-group" id="bloodhound">
<div id="the-basics">
<input type="text" class="typeahead" id="nav-search" placeholder="Search">
</div>
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
<ul class="nav navbar-nav">
<li><%= link_to 'Home', "#" %></li>
<% if logged_in? %>
<li><%= link_to 'Sign Out', session_url, method: :delete %></li>
<li><%= link_to 'My Profile', "#/users/#{current_user.id}" %></li>
<% else %>
<li><%= link_to 'Sign In', new_session_url%></li>
<% end %>
</ul>
</nav>
Backbone开始代码:
window.App= {
Models: {},
Collections: {},
Views: {},
Routers: {},
initialize: function() {
App.Collections.businesses.fetch({
success: function () {
new App.Routers.Businesses({
$rootEl: $("#content")
});
if (!Backbone.History.started) {
Backbone.history.start();
}
}
});
}
};