목록개발 (194)
파파비의 블로그
자동 로그 아웃 구현은 어렵지 않다. 이미 로그아웃 메소드를 구현해놓은 상태에서, Timer라는 객체를 이용하면 된다. Timer라는 객체는 얼마 시간 후 자동으로 callback이 실행되게 할 수 있다. 만료 시간은 이미 response로 받은 데이터를 활용해서 diferrence를 이용하면 구할 수 있다. 위 코드를 읽어보면 쉽게 이해가 될 것이다. 참고로 알아두어야 할 것은 한번 설정되면 꼭 실행되므로, 그 중간에 로그아웃을 하거나, 하는 이벤트가 생기면 꼭 cancle를 해주어야한다. 그래서 자동로그아웃이 실행되거나 로그아웃을 실행할 때 보면 한번 체크하고, cancle을 외쳐주는 것을 볼 수 있을 것이다.
우리는 product에 그 data를 저장한 userID를 첨부해두었다. 그래서 해당 유저 id를 가진 사람이 data를 요청할 때, 본인의 id가 입력된 product를 받고 싶을 때 활용할 수 있다. 이때 모든 데이터를 받아서 client쪽에서 분류하는 것보다 서버에서 애초에 정리해서 보내주는게 훨씬 좋다. 그렇게 하는 방법은 역시나 서버마다 다르겠지만 firebase의 경우, 위 경우처럼 orderby와 equalTo를 활용하면 된다 해당 기능을 사용하기 위해선 database에 규칙을 이런식으로 넣어놔야하는데, 자세한 내용은 정확히 잘은 모르겠다 ㅠㅠㅠㅠ
여기 데이터베이스 규칙을 보면, 읽고 쓰기 모두 auth가 필요하게끔 설정해두었다. 그래서 이전 글처럼 단순히 로그인만해서는 DB에서 데이터를 가져올 수 없다. 이런 식으로, 발행받은 토큰을 url에 넣어주어야 한다. auth가 null이 되지 않게끔 말이다. 참고로 이런 api는 전부 '서버'별로 다르다는 것을 다시 한번 인식하고 가자! 저렇게 곧장 화면이 켜질 때, 인증받은 토큰이 필요한데, data를 가져올 수 있을까? 일단 이렇게 생성자에 넣었다. 그런데 이들은 앱 어디 부분에서 생성되는가? 바로 맨처음 provider로 생성이된다. Auth와 Provider 모두다 말이다. 우리는 Auth가 먼저 실행된 후 Provider가 Auth에서 데이터를 가져와서 build가 이루어져야 한다. 이렇게 종..
Cascade operator : ".." The ".." syntax invokes a method (or setter or getter) but discards the result, and returns the original receiver instead. 이 코드를 보면 .. 이라는 키워드가 있다. 만약 점이 한게라면, translate 메소드의 return값 최종적으로 도출된다. 하지만 우리는 Matrix4.rotationZ의 return값을 주길 원하고, translate을 통해 내부적인 값만 변경하길 원한다. 이럴때 ..을 쓴다. ..을 쓰면 그 메소드는 실행된 후 return값은 무시된다. 그래서 앞의 메소드의 return 값이 도출된다. 위 코드는 여기 주석하고 같은 의미를 갖는다. 이렇..
1) DB 규칙 수정 이제 읽고 쓰는 것은 auth 인증을 받은 유저만 할 수 있다. 이 규칙은 auth인증을 받은 유저는 무엇이든 읽고, 쓰고 할 수 있기 때문에 product용보단 그냥 데모용으로 생각해야한다. 2) Auth인증 사용하겠다고 설정 Firebase Auth가서 이메일/비번을 사용하도록 설정해둔다. 준비완료 ^^
처음에 인증(가입? ) 같은 절차를 받으면 서버에서는 서버의 알고리즘 및 private key를 이용하여 토큰을 발급해준다. 우리는 해당 토큰을 디바이스에 저장하고, request를 할 때마다 토큰을 함께 첨부한다. 만약 request에 토큰이 없다면 서버가 인증한 유저가 아니므로 거절을 당한다. 세션은 웹 인증방식인데, 저기 그림에서는 플러터는 그런 방식을 사용하지 않는다는 의미로 나온 것이다.
Future가 있는 위젯을 만들기위해선 Stateful 위젯으로 해둔 다음에, 로딩이 완료되면 그 값에 따라 setstate을 다시 해야했다. 코드가 굉장히 지저분해지고, Stateful위젯이 강제된다는 점에서 불편하기도 했다. 이를 극복하기 위해 존재하는 위젯이 있는 바로 FutureBuilder를 사용하는 것이다. FutureBuilder는 3가지의 요소를 갖는다. child, future, builder이다. future에 우리가 원하는 Future를 return하는 메소드를 넣고, builder에는 context와 snapshot을 인수로 갖고 위젯을 리턴하는 메소드를 넣으면된다. (snapshot은 Future의 return 값을 의미한다.) 그래서 future의 값에 따라 원하는데로 위젯을 b..
객체 리스트 전부를 저장하기 map, list는 json format이 가능하다. 만약 우리가 만든 오브젝트들의 리스트를 firebase에 저장하고 싶다면 그 오브젝트 각각을 map으로 변환 시켜야한다. 리스트는 .map이라는 메소드가 있다. 리스트의 모든 원소들을 한번씩 돌리면서 새로운 iterable를 만들어낸다. 우리는 .map을 이용하면 각 객체들을 map으로 바꾼 List를 만들어낼 수 있다. 이러면 json화가 가능하고, 그대로 firebase에 저장이 가능해진다. Time은 ToString()보다, 변환이 편리한 ISO tostring으로 DateTime은 그대로 json화가 되지 않는다. 그래서 string으로 변환이 필요한데, ToString보다 dateTime으로 변환이 편리한 Iso8..