如何在不重定向的情况下在 OAuthCallBack 之后返回到您的客户端

How to get back to your client after the OAuthCallBack without redirect

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

有没有更好的方法返回客户端,无需重定向?

小改进:我发现我可以在 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");
    }
}

重定向随后将使用会话属性来识别用户:

User oauthUser = (MyUser) session.getAttribute("oauth_user");