RubyonRails로 유명한 devise를 다루는 데 조심하고 싶은 routes.rb를 작성하는 방법

2870 단어 Railsdevise

RubyonRails에서 devise를 다루는 데 조심하고 싶은 것



가끔 라우팅이 충돌하고 devise 로그인 화면이 움직이지 않습니다.



첫째, 오류가 발생하지 않는 쓰기 방법은 다음과 같습니다.



그런 다음 오류가 발생하는 쓰기


간단히 말하면, users의 기술보다 나중에 devise_for :users를 기술해 버리면 에러가 일어난다.

어떤 오류가 발생하는지



로그인할 수 없게 됨





/users/sign_in으로 로그인할 수 없습니다.


라든지

가 나온다.
그 밖에도 여러가지 에러가 생각되지만, 어쨌든 로그인 기능이 움직이지 않게 됩니다

왜 이런 오류가 발생하는가?



routes.rb의 순서는 정말 중요합니다 ...
rake routes를 사용하여 라우팅 설정을 확인하십시오.

우선 devise_for: users의 순서가 맞을 때


devise_for : 사용자의 순서가 잘못되었을 때


어디에 변화가 있는가 하면, users 컨트롤러의 라우팅과 devise의 라우팅의 순서

이번에 발생한 오류는 users/:id라는 라우팅이 users/sign_in을 포괄하기 때문에 발생하는 오류입니다.
users/: id는 : id가 변수로 인식되므로 문자열이지만 숫자이지만 요청하는 URL이 users/00이되면 users/: id 라우팅이 작동합니다. .

즉, users/sign_in을 리퀘스트해도, users/:id(id = sign_in)로서 인식되어 버려, devise의 콘트롤러가 움직이지 않게 되어 버리는 것이다.

실제로 users/:id가 움직이고 id => sign_in입니다.





오류 화면의 Request를 보면 {"id"=> "sign_in"}입니다.
sign_in이 :id로 인식됩니다.

devise_for :users는 먼저 쓰자.



이번과 같이, users/:id가 users/sign_in을 포괄하지 않게, devise_for :users를 먼저 쓰는 것으로 users/sign_in 뒤에 users/:id가 라우팅으로서 움직인다.

users 컨트롤러가 없으면 차례로 신경 쓸 필요는 없지만 어떤 경우에는 조심하지 않으면 오류가 발생합니다.

Request의 parameters를 보는 것도 중요합니다.

좋은 웹페이지 즐겨찾기