질문을 삭제하지 말아주세요.!
 
1
0
-1

안녕하세요.

서버환경은 우분투 16.04를 사용하고 있고 버츄얼박스 환경에서 구동중에 있습니다.


비밀번호 바꾸기 구현 항목을 책을 보고 따라하고 있습니다.

페이지 229부터 232 다듬질 항목 전까지 모든것을 그대로 입력했습니다.

에러를 뱉길래 몇번을 반복해서 확인해서 소스상 누락부분은 없습니다.


에러메시지는 다음과 같이 나옵니다.

GET /auth/reset을 열어보면...


MethodNotAllowedHttpException in RouteCollection.php line 251:


이라고 나오는데요...

검색을 해보니 라우트 설정이 잘못되면 그렇다고 하더라구요.

Post랑 Get 관련해서 문제인것 같은데...

일단 아래 소스코드가 현재 사용중인 경로 소스입니다.


어디가 잘못된것인지 고견 부탁드려도 될까요..?ㅜㅜ



routes/web.php
Route::get('docs/{file?}', 'DocsController@show');
Route::get('docs/images/{image}', 'DocsController@image')
	->where('image', '[\pL-\pN\._-]+-img-[0-9]{2}.png');

Route::get('/home', 'HomeController@index');
/* Laravel Route Start : Chapter23 */
/* User Join */
Route::get('auth/register', [
	'as' => 'users.create',
	'uses' => 'UsersController@create'
]);
Route::post('auth/register', [
	'as' => 'users.store',
	'uses' => 'UsersController@store'
]);
Route::get('auth/confirm/{code}', [
	'as' => 'users.confirm',
	'uses' => 'UsersController@confirm'
])->where('code', '[\pL-\pN]{60}');


/* User Auth */
Route::get('auth/login', [
	'as' => 'sessions.create',
	'uses' => 'SessionsController@create'
]);
Route::post('auth/login', [
	'as' => 'sessions.store',
	'uses' => 'SessionsController@store'
]);
Route::get('auth/logout', [
	'as' => 'sessions.destory',
	'uses' => 'SessionsController@destroy'
]);

/* Password Reset */
Route::get('auth/remind', [
	'as' => 'remind.create',
	'uses' => 'PasswordsController@getRemind',
]);
Route::post('auth/remind', [
	'as' => 'remind.store',
	'uses' => 'PasswordsController@postRemind',
]);
Route::get('auth/reset/{token}', [
	'as' => 'reset.create',
	'uses' => 'PasswordsController@getReset',
])->where('token', '[\pL-\pN]{64}');
Route::post('auth/reset', [
	'as' => 'reset.store',
	'uses' => 'PasswordsController@postReset',
]);


잘 부탁드리겠습니다..

    CommentAdd your comment...

    2 answers

    1.  
      1
      0
      -1

      쓰시는 라라벨 버전이 뭐죠?

      책에서는 라라벨 기본 내장 사용자 인증을 무시하고, 직접 구현하기 때문에 라라벨 버전에 영향이 없어야 하는데요. 다음 절차에서 잘못된 부분이 있는 지 확인해 주세요.


      사용자시스템
      GET /auth/remind 을 요청한다.

      비밀번호 초기화 폼을 제공한다.
      처음 가입했던 이메일 주소를 입력하고 폼을 전송한다.

      입력 내용을 확인하고,
      비밀번호를 초기화할 수 있는 링크를 담은 이메일을 발송한다.
      이메일에 포함된 링크
      GET /auth/reset/{영자숫자로포함된64바이트난수}
      를 요청한다.


      난수에 해당하는 사용자가 있는 지 확인하고,
      비밀번호 초기화 폼을 제공한다.
      새 비밀번호를 입력하고 폼을 전송한다.

      비밀번호를 업데이트한다.
        CommentAdd your comment...
      1.  
        1
        0
        -1

        안녕하세요. 빠른 답변 감사합니다.

        현재 라라벨 5.4 버전을 사용하고 있습니다.

        말씀해주신 순서에서 "가입했던 이메일 주소를 입력하고 폼을 전송한다" 에서 에러메시지가 나길래

        에러가 난 부분을 찾아서 수정하였습니다.

        책에서 코드 23-24를 보면 Mail::send('emails.passwords.reset', compact....) 부분을

        일단 passwords.reset으로 수정하였습니다. 그러니까 일단 메일은 날라가는데요...


        resources/views/passwords/reset.blade.php 부분에 토큰을 히든값으로 넣어주고

        그다음 생략이라고 하는 부분을 어떤것을 입력해야하는지 몰라서 공백으로 두니

        빈 메일이 날라가네요.

        이 부분은 어떻게 채워야 하는건가요?

        초보스러운 질문이지만 답변 부탁드리겠습니다.

        덕분에 라라벨에 대한 재미를 느껴가고 있습니다. 꾸벅~~

        1. 김주원

          빈 메일이라면 메일 본문에 해당하는 뷰가 없어서가 아닐까 싶습니다. 아래 링크를 참고해주세요.

          https://github.com/appkr/l5code/commit/117db71ea31e040b3eb652ee05053756c24074c9

        2. Jongwon Kim

          정말 많은 도움이 되고 있습니다. (_ _)

          답변 감사합니다.


          마지막으로 하나만 더 물어볼께요.

          이메일로 직접 텍스트필드로 해서 비밀번호 바꾸는것은 잘되는데

          링크 형식으로 넘기는것은 표시가 아래 사진처럼 안되네요.

          어느 부분을 수정하면 좋을까요?

          myapp.dev:8000으로 접속해도 같습니다.

        3. 김주원

          http://localhost:8000/auth/reset/WU...R8을 링크로 만들고 싶다는 말씀이신지? 이해를 잘 못했습니다. 링크라면 이메일 뷰에서 <a href="{{route('라우트이름', $token)}}">링크 텍스트</a>로 하면 되지 않을까요?

        4. Jongwon Kim

          확인 감사합니다.

          이메일이 저 내용 그대로 출력되서 링크를 눌렀는데 위 사진처럼 나옵니다.

          이메일에서 링크 클릭한 후에 이동되는 화면에서는 주소변경할 수 있는 폼같은게 나와야 하는것 같은데 위와 같은 상태에서 처리과정이 끝나서 이다음에 어디를 수정해야 하는지 여쭈어보았습니다.


          정리하자면...

          이메일주소로 비밀번호 전송 → 이메일도착, 읽기 → 이메일에서 이 주소를 여세요 링크 클릭 →

          위 사진처럼 화면 그대로 표시되고 다음 단계가 안보임


          입니다.  ( _ _ )

        5. 김주원
          Route::get('auth/reset/{token}', [
          	'as' => 'reset.create',
          	'uses' => 'PasswordsController@getReset',
          ])->where('token', '[\pL-\pN]{64}');


          에서 쓰신 것 처럼, PasswordsController@getReset 메서드에서 비밀번호 바꾸기 폼을 응답해야 합니다. 이 폼을 전송하면 아래의 PasswordsController@postReset 메서드가 처리해야 합니다.


          Route::post('auth/reset', [
          	'as' => 'reset.store',
          	'uses' => 'PasswordsController@postReset',
          ]);



        6. Jongwon Kim

          답변 감사합니다. 즐거운 하루 보내세요~!

        CommentAdd your comment...