SpringSecurity + JS:Uncaught SyntaxError:无效或意外的令牌

时间:2016-10-30 08:03:24

标签: javascript java jquery html spring-security

通过电子邮件激活注册用户模块。几乎所有事情都已完成,但我在浏览器中遇到错误(在开发人员工具模式下):

  

未捕获的SyntaxError:无效或意外的令牌   确认login=zzheads@gmail.com& confirmString = $ 2A $ 10 $ NVCbcrmlsLeM6A31HxJOqOCzfOgUno6PJ5uN3XflUZkQ.r ...:694

何时再次发送激活链接'功能。 我有MailAPI方法:

@RequestMapping (path = "/sendagain", method = RequestMethod.POST, produces = "application/json")
@ResponseBody public String sendMailAgain (@RequestBody String email) {
    Gson gson = new Gson();
    User user = userService.findByName(email);
    if (user != null) {
        String confirm = passwordEncoder.encode(user.getId().toString() + user.getUsername() + user.getPassword());
        String body = EmailTemplate.getHtmlCode(user.getUsername(), confirm);
        MailApi.sendMail(user.getUsername(), "www.zdelivery.ru", body, "Пожалуйста активируйте ваш аккаунт на сайте zdelivery.ru");
        return (gson.toJson("success"));
    }
    return gson.toJson("failure");
}

我的login.html的一部分,我再次建议用户发送激活链接:

<div th:if="${emailAgain==true}" class="container">
    <div class="row col s12">
        <div class="row col s8 offset-s2 white z-depth-3">
            <div class="row center teal-text text-darken-2">
                <h5 th:text="@{'Послать еще раз ссылку активации аккаунта '+${username}}"></h5>
            </div>
            <div class="row">
                <div class="input-field col s6 offset-s3">
                    <p>
                        Для отправки письма со ссылкой активации аккаунта нажмите кнопку ниже:
                    </p>
                </div>
            </div>
            <div class="row center">
                <br/>
                <button class="waves-effect waves-light btn" th:onclick="@{'emailAgain('+${username}+')'}"><i class="material-icons right">send</i>Отправить</button>
                <br/>
            </div>
        </div>
    </div>
</div>

和我的JavaScript emailAgain函数:

function emailAgain (email) {
    console.log("emailAgain "+email);

    $.ajax({
        url: "/sendagain",
        type: "POST",
        dataType: "json",
        contentType: "application/json",
        data: JSON.stringify(email, null, "\t"),
        headers: {"X-CSRF-Token": $("meta[name='_csrf']").attr("content")},
        success: function (result) {
            console.log(result);
            // $registrationForm.children().remove();
            // $registrationForm.append(showConfirm(email));
        },
        error: getErrorMsg
    });
}

但当我按下按钮&#34; emailAgain&#34;它不会调用函数,只是浏览器上面显示的错误信息。

什么&#34;令牌&#34;它在说什么? 如何解决?

更新没有任何服务器端错误。 我确定_csrf令牌存在问题。 用户加载页面来自电子邮件,因此该请求不包含正确的_csrf令牌。禁用整个应用程序的_csrf防御不是一个选项。 如何在没有_csrf的情况下启用请求单页?

0 个答案:

没有答案