response.sendRedirect () не перенаправляет на обратный вызов после входа в Twitter - PullRequest
0 голосов
/ 05 октября 2019

Я создаю веб-приложение, в котором у меня есть внешний интерфейс в React JS и внутренний интерфейс в Java Spring Boot. Во внешнем интерфейсе у меня есть кнопка с событием onClick, которое получает / подписывает в бэкэнде. Там (в бэкэнде) у меня есть два метода @GetMapping. Первый - http://localhost:8080/signin, а второй http://localhost:8080/callback. Когда я отлаживаю метод / signin, response.sendRedirect (url) не перенаправляет меня на функцию обратного вызова - / callback. В аккаунте разработчика в твиттере у меня есть хороший набор обратных ссылок, который составляет http://localhost:8080/callback. Кроме того, когда я отлаживаю метод с отображением / входом в систему, я не получаю логин через твиттер. Я не знаю почему. Кто-нибудь может мне помочь?

Вот мой код

Backend

TwitterController

@RestController
public class TwitterController {

@GetMapping("/signin")
public void loginWithTwitter(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    ConfigurationBuilder cb = new ConfigurationBuilder();
    cb.setDebugEnabled(true)
            .setOAuthConsumerKey("xxxx")
            .setOAuthConsumerSecret("xxx");
    TwitterFactory tf = new TwitterFactory(cb.build());
    Twitter twitter = tf.getInstance();
    request.getSession().setAttribute("twitter", twitter);
    try {
        StringBuffer callbackURL = request.getRequestURL();
        int index = callbackURL.lastIndexOf("/");
        callbackURL.replace(index, callbackURL.length(), "").append("/callback");

        RequestToken requestToken = twitter.getOAuthRequestToken(callbackURL.toString());
        request.getSession().setAttribute("requestToken", requestToken);

        response.sendRedirect(requestToken.getAuthenticationURL());
    } catch (TwitterException e) {
        throw new ServletException(e);
    }
}

@GetMapping("/callback")
public void loginWithTwitterCallback(HttpServletRequest request, HttpServletResponse response) throws TwitterException, ServletException, IOException {
    Twitter twitter = (Twitter) request.getSession().getAttribute("twitter");

    RequestToken requestToken = (RequestToken) request.getSession().getAttribute("requestToken");
    String verifier = request.getParameter("oauth_verifier");

    AccessToken accessToken = twitter.getOAuthAccessToken(requestToken, verifier);
    request.getSession().removeAttribute("requestToken");

}
}

Frontend

LogIn.js

class LogIn extends React.Component {
constructor(props) {
    super(props);
    this.onTwitterClick = this.onTwitterClick.bind(this);
}

onTwitterClick() {
    fetch("/signin", {
        method: 'GET'
    }).then(response => response.json())
    .then(jsonData => {
        console.log(jsonData);
    });
}

render() {
    return(
        <div className="login-container">
            <div className="login-form-container form-container-shadow form-size">
                <div>
                    <button className="btn btn-primary" onClick={this.onTwitterClick}>
                        LOGIN WITH TWITTER
                    </button>
                </div>
            </div>
        </div>
    );
}
}

export default withTranslation('common')(LogIn);
...