如何在不重定向的情况下在 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");
我有一个 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");