2016-08-15 126 views
0

我在Grails GSP中使用BootStrap,我在其代碼下面有一個登錄模式,我使用spring security plugin來處理登錄,我如何返回到此模式並顯示閃存消息以防萬一輸入的用戶名和密碼是錯誤的。BootStrap和Grails

登錄模態代碼:

<sec:ifNotLoggedIn> 
    <li> <a href="#" data-toggle="modal" data-target="#login-modal" class="btn navbar-btn btn-white"><i class="fa fa-sign-in"></i>Log in</a> <%--<g:link controller="login" action="auth">Login</g:link></li>--%> 
     </sec:ifNotLoggedIn> 
<!-- *** LOGIN MODAL ***_________________________________________________________ 
--> 
<div id="login-modal" tabindex="-1" role="dialog" aria-labelledby="Login" aria-hidden="true" class="modal fade"> 
    <div class="modal-dialog modal-sm"> 
    <div class="modal-content"> 
     <div class="modal-header"> 
     <button type="button" data-dismiss="modal" aria-hidden="true" class="close">×</button> 
     <h4 id="Login" class="modal-title">Customer login</h4> 
     </div> 
     <div class="modal-body"> 
     <g:if test='${flash.message}'> 
     <div class="message" role="status"> ${flash.message}</div></g:if> 
     <form action='./j_spring_security_check' method='POST' id='loginForm' class='cssform' autocomplete='off'> 
      <div class="form-group"> 
      <%--<input id="email_modal" type="text" placeholder="email" class="form-control"> 
      --%><input type='text' class='form-control' name='j_username' id='username' placeholder="${message(code:'springSecurity.login.username.label') }"/> 
      </div> 
      <div class="form-group"> 
      <%--<input id="password_modal" type="password" placeholder="password" class="form-control"> 
      --%><input type='password' class='form-control' name='j_password' id='password' placeholder="${message(code:'springSecurity.login.password.label') }"/> 
      </div> 
      <p class="text-center"> 
      <button type="submit" id="submit" class="btn btn-primary"><i class="fa fa-sign-in"></i> ${message(code: 'springSecurity.login.button')}</button> 
      </p> 
     </form> 
     <p class="text-center text-muted"><g:link controller="users" action="create"><g:message code="spring.security.ui.login.register" default="New User"/></g:link></p> 
     <p class="text-center text-muted"><g:link controller="register" action="forgotPassword"><g:message code="spring.security.ui.login.forgotPassword" default="Forgot Password"/></g:link></p> 
     </div> 
    </div> 
    </div> 
</div> 
<!-- *** LOGIN MODAL END ***--> 

這裏是在彈簧芯登錄控制器:

def auth() { 

    def config = SpringSecurityUtils.securityConfig 

    if (springSecurityService.isLoggedIn()) { 
     redirect uri: config.successHandler.defaultTargetUrl 
     return 
    } 

    String view = 'auth' 
    String postUrl = "${request.contextPath}${config.apf.filterProcessesUrl}" 
    render view: view, model: [postUrl: postUrl, 
           rememberMeParameter: config.rememberMe.parameter] 
} 
+0

顯示處理登錄操作的控制器的當前代碼。 –

+0

@Michal_Szulc我編輯了問題 – Sherif

+0

@Sherif你的模式是在「auth.gsp」還是其他一些自定義登錄視圖? –

回答

0

您可以覆蓋LoginController中,並修改你想要的一切行動。考慮到這一點......

如果該參數存在,您可以將操作的參數發送到您的gsp視圖以打開該模式。

<g:if test="${openModal}"> 
<script> 
    $(document).ready(function(){ 
     openModal(); 
    }); 
<script> 
</g:if> 

其他的方法是用Ajax做這一切。

您必須重寫LoginController並在您的項目中創建它的副本,如上例所示。

之後,您必須更改您期望得到的結果,修改其對Ajax響應的響應。

render status: 401, text: 'Unauthorized' 

而且,當然,您必須更改表單行爲以對調用登錄控制器進行ajax調用。這是不推薦的,但你可以用g:remoteForm代替那個表單。或者創建你自己的ajax函數。