로그인이 필요합니다 이후 로그인 페이지로 어떻게 이동하게 만들 수 있나요
CMS/프레임워크 | Rhymix 2.1 |
---|---|
개발 언어 | PHP 8.3 |
게시판 글에 추천에 클릭하면
비회원 추천을 허용하지 않은 경우
로그인이 필요합니다라는 메시지창이 뜨는데
그 후로 바로 로그인 화면으로 이동시키고 싶은데 어떻게 할 수 있을까요

eond
Lv. 12
CMS/프레임워크 | Rhymix 2.1 |
---|---|
개발 언어 | PHP 8.3 |
게시판 글에 추천에 클릭하면
비회원 추천을 허용하지 않은 경우
로그인이 필요합니다라는 메시지창이 뜨는데
그 후로 바로 로그인 화면으로 이동시키고 싶은데 어떻게 할 수 있을까요
댓글 14
자체 함수를 만들어서 달 수 밖에 없을려나요
checkLoginBefore {
if 로그인 안했다면
로그인이 필요합니다 -> 로그인화면으로 이동합니다.
doCallModuleAction 을 실행...
}
1. 현재 사용한 코드입니다.
1) php
@if($document->getMyVote())
<a href="javascript:;" onclick="do_doc_VoteSubmit('document','procDocumentVoteUpCancel','{$document->document_srl}'); return false;">좋아요취소 <span class="cnt">{$document->get('voted_count') ? $document->get('voted_count') : ''}</span></a>
@else
<a href="javascript:;" onclick="do_doc_VoteSubmit('document','procDocumentVoteUp','{$document->document_srl}'); return false;">좋아요 <span class="cnt">{$document->get('voted_count') ? $document->get('voted_count') : ''}</span></a>
@endif
2) js
function do_doc_VoteSubmit(module, action, target_srl) {
saveScrollPosition(); // 스크롤 위치 저장
shouldRestoreScroll = true; // 스크롤 복원을 활성화
var params = { 'target_srl': target_srl, 'cur_mid': current_mid };
exec_json(module + '.' + action, params, function () {
location.reload();
});
}
2. 조언해주신대로 js를 이렇게 수정해봤습니다.
function do_doc_VoteSubmit(module, action, target_srl) {
saveScrollPosition(); // 스크롤 위치 저장
shouldRestoreScroll = true; // 스크롤 복원을 활성화
const params = { target_srl: target_srl, cur_mid: current_mid };
// Ajax 요청
exec_json(module + '.' + action, params, function (response) {
if (response.status === 'error') {
// 로그인이 필요한 경우 처리
alert(response.message);
if (response.redirect_url) {
window.location.href = response.redirect_url; // 로그인 페이지로 이동
}
} else if (response.status === 'success') {
// 성공 처리
alert(response.message);
location.reload(); // 페이지 리로드
}
});
}
이렇게 해도 response 답이 없고 그대로 '로그인이 필요합니다' 라는 메세지만 뜨고 말아버리네요.
혹시 어디를 찾아봐야할까요.
아마 위 코드는 document.controller.php에서
function procDocumentVoteUp() 이 함수를 먼저 타서 그런거 같은데요.
alert(response.message); //
window.location.href = '/login'; //이동할 주소
}
테스트 해본건 아닌데 이렇게 해보시면 될듯합니다.
if (response.redirect_url) {
window.location.href = response.redirect_url; // 로그인 페이지로 이동
} 이런부분은 필요없을듯 합니다.
아마도 procDocumentVoteUp() 이 함수에 로그인 체크 부분이 먼저 걸러져서 그럴거 같아요. ㅠ
서버에서 에러메시지를 반환하는 상황은 4번째 파라미터인 error 콜백함수로 처리해야 합니다.
error 콜백함수를 지정하지 않으면 그냥 alert하는 것이 기본값입니다.
이 때 success 콜백함수는 호출되지 않으므로, 그 함수 안에서 뭔 짓을 해도 소용없어요.
function do_doc_VoteSubmit(module, action, target_srl) {
saveScrollPosition(); // 스크롤 위치 저장
shouldRestoreScroll = true; // 스크롤 복원을 활성화
const params = { target_srl: target_srl, cur_mid: current_mid };
// Ajax 요청
exec_json(
module + '.' + action,
params,
function () {
location.reload(); // 페이지 리로드
},
function (response) {
// console.log(response)
window.location.href = '/login';
}
);
}
네번째 인자에 이렇게 적어줬는데 '로그인이 필요합니다' alert창은 항상 뜨는데 안뜨게 하는 방법은 없을까요?
로그인이 필요합니다 라는 경고창이 뜬 후에 이동이 됩니다.
네번째 인자로 넘기신 함수에서 리다이렉트 후 return false; 해보세요.
브라우저에서 실행 순서를 멋대로 최적화하는 건지,
리다이렉트 명령을 내린 후에도 코드가 계속 실행되더라구요;;;
window.location.href = mid + '/login';
return false; // 기본 alert 방지
잘됩니다~~~~
if (response.error) {
window.location.href = '/login';
return;
}
이 부분이 작동됩니다.
로그인 여부에 따라 스킨 소스에서 미리 거르는 방법도 있을 것 같습니다.
@auth
@if($document->getMyVote())
좋아요취소
@else
좋아요
@endif
@endauth
@guest
<a href="로그인화면">좋아요</a>
@endguest