如何在没有重定向的OAuthCallBack之后返回到您的客户端

时间:2015-04-06 08:19:42

标签: google-app-engine servlets redirect gwt oauth

我有一个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参数来获取应用程序用户对象。

有没有更好的方法可以回到客户端,没有重定向?

1 个答案:

答案 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");