我实现了帐户创建和登录使用facebook连接使用devise + omniauth on rails 3.然而,我的问题是在用户注销时清除facebook会话和cookie。目前,当用户退出时,似乎清除当前会话。但是,当用户再次登录时,由于facebook cookie,它会自动登录用户。我想使用sign_out方法来清除cookie,这样当用户下次尝试登录时,它会要求用户使用facebook登录。
现在我正在使用默认设计路线“devise_for:users”。我可以通过创建“类SessionsController< Devise :: SessionsController”来覆盖它吗?如果是这样,我是否需要同时编写create和destroy方法?在destroy方法中,如何准确清除fb cookie?
非常感谢任何帮助!
答案 0 :(得分:1)
为了清除FB会话,您必须使用FB JS SDK。
所以,这就是我所做的。
首先,init FB JS。我使用了部分,但你可以把它放在布局中
<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>
然后,我将logout链接绑定到FB.logout函数,该函数在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 %>