我在rails 3上使用设计+ omniauth实现了使用facebook connect创建帐户和登录。但是,我的问题是,当用户注销时,清除facebook会话和cookie。目前,当用户注销时,似乎会清除当前会话。但是,当用户再次登录时,由于facebook cookie,它会自动登录用户。我希望sign_out方法来清除cookie,以便当用户下次尝试登录时,它会要求用户与facebook登录。
现在我正在使用默认的设计路由"device_for:users"。我是否应该通过创建"类SessionsController
任何帮助将非常感激!
为了清除FB会话,你必须使用FB JS SDK。
所以,这就是我所做的。
首先,init FB JS。我用的是局部,但你可以把这个放到layout
<script type="text/javascript">
window.fbAsyncInit = function() {
FB.init({
appId: '[APP_ID]',
status: true,
cookie: true,
xfbml: true});
};
(function() {
var e = document.createElement('script');
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
e.async = true;
document.getElementById('fb-root').appendChild(e);
}());
</script>
然后,我将注销链接绑定到FB。application.js中调用destroy_user_session_path的注销函数。
$(function() {
$('#logout').click(function(e) {
FB.logout(function(response) {
var url = $('#logout').attr('redirect_url');
$.ajax({
url: url,
type: 'DELETE',
success: function(msg) {
window.location = '/';
}
});
});
e.preventDefault();
});
});
我application.html.erb 。
<% if user_signed_in? %>
<p><%= link_to "logout", "#", :id => "logout", :redirect_url => destroy_user_session_path %></p>
<p>Hi, <%= current_user.email %></p>
<% else %>
<p><%= link_to 'Login with Facebook', '/auth/facebook/' %></p>
<% end %>