我有一个Appengine / GWT应用程序,并实现了OAuth。它有效,但我现在在Oauth回调中重定向。此重定向不能提供流畅的用户体验,因为应用程序在登录后重新加载。
这是我的回调代码:
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String oauth_provider = req.getParameter("oauth_provider");
String oauth_token = req.getParameter("oauth_token");
String oauth_verifier = req.getParameter("oauth_verifier");
String redirect = "http://www.exmaple.com";
OAuthProvider oAuthProvider = OAuthProvider.valueOf(oauth_provider);
String providerUserId = createUser(oAuthProvider, oauth_verifier, oauth_token); // which creates the user in my application if not yet existing
redirect = redirect.concat("?oauth_provider=" + oAuthProvider.name() + "&user=" + providerUserId);
resp.sendRedirect(redirect);
}
然后客户端将使用他的url参数来获取应用程序用户对象。
有没有更好的方法可以回到客户端,没有重定向?
答案 0 :(得分:0)
小小的改进:我发现我可以在appengine中使用会话。这样,我可以进行重定向,而无需传递url参数。这提供了更流畅的用户体验。但它仍然是一个重定向,我希望我能抓住它......
在appengine-web-app.xml中,设置
<sessions-enabled>true</sessions-enabled>
回调:
public class OAuthCallback extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String oauth_provider = req.getParameter("oauth_provider");
String oauth_token = req.getParameter("oauth_token");
String oauth_verifier = req.getParameter("oauth_verifier");
OAuthProvider oAuthProvider = OAuthProvider.valueOf(oauth_provider);
String providerUserId = createUser(oAuthProvider, oauth_verifier, oauth_token); // which creates the user in my application if not yet existing
req.getSession().setAttribute("oauth_user", new MyUser(oAuthProvider, providerUserId));
resp.sendRedirect("http://www.example.com");
}
}
然后,重定向将使用session属性来标识用户:
User oauthUser = (MyUser) session.getAttribute("oauth_user");