Skip to content

s8sato/study-actix-web-simple-auth-server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

What's this

A server created basically according to THIS TUTORIAL

How to run

server

echo -n -e "\
DATABASE_URL=postgres://username:password@localhost/your_database\n\
SPARKPOST_API_KEY='yourapikey'\n\
SENDING_EMAIL_ADDRESS='register@yourdomain.com'\n\
" > .env

then

cargo run

client

Here is

  • Invitation request
  • Registration request

Here is

  • Login request
  • Get-me request
  • Logout request

Study log

PREREQUISITE

ひとまず postgresql diesel_cli を無視して先へ

LET’S BEGIN

環境を確認

$ uname -a
Linux DESKTOP-HQJERCJ 4.19.104-microsoft-standard #1 SMP Wed Feb 19 06:37:35 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
$ lsb_release -d
Description:    Ubuntu 20.04.1 LTS
$ rustc --version && cargo --version
rustc 1.46.0 (04488afe3 2020-08-24)
cargo 1.46.0 (149022b1d 2020-07-17)

やらなくてもいいかもしれないやつ

<!-- $ echo "1.46.0" > rust-toolchain -->
<!-- $ sudo apt install libssl-dev pkg-config -->

Cargo.toml[dependencies] に追記
そのあと色々やるも、どうも argonautica がらみで build できない
代わりに rust-argon2 を入れて、ひとまず build に成功

SETUP THE BASE APP

models.rs を作成、 main.rs を編集
postgresql diesel_cli が必要になるので用意

$ sudo apt-get install postgresql-12
<!-- $ sudo apt install libpq-dev -->
$ cargo install diesel_cli --no-default-features --features postgres

データベース接続情報を用意

$ sudo passwd postgres
$ sudo -u postgres createdb simple_auth
$ echo DATABASE_URL=postgres://postgres:password@localhost/simple_auth > .env

At this stage your server should compile

とのことですが、まだ schema.rs utils.rs invitation_handler.rs を作っていないので
コンパイルは通らないはずです

SETTING UP DIESEL AND CREATING OUR USER MODEL

$ diesel setup
$ diesel migration generate users
$ diesel migration generate invitations

up.sql down.sql たちを編集

$ diesel migration run

models.rs を編集

Check your implementation is free from errors/warnings

とありますが当然まだエラーだらけです。ガッハッハ!

OUR OWN ERROR RESPONSE TYPE

errors.rs を作成

IMPLEMENTING HANDLERS

invitation_handler.rs を作成

TEST YOUR SERVER

そもそもまだ build できてないので curl しようがないですね

USING SPARKPOST TO SEND REGISTRATION EMAIL

.env に追記、下表はそのためにやったこと

どこで なにを
SparkPost アカウントを作る
お名前.com 安いドメインを買う
SparkPost 送信ドメイン に追加、 DNS Settings を確認
お名前.com DNS SettingsDNSレコード設定 に追加登録
SparkPost すこし待ってから Verify TXT Record
SparkPost APIキー生成

email_service.rs を作成
invitation_handler.rs のコメントアウト

// use crate::email_service::send_invitation;
// send_invitation(&invitation)

を解除

GET SOME HELP

utils.rs を作成

  • argonautica の代わりに rust-argon2 で書いてみました

models.rs を編集、

use serde::{Serialize, Deserialize};

を追記

email_service.rsTransmission::new_euTransmission::new に変更
cargo run するとサーバが起動するので別ターミナルから curl を叩きます

curl --request POST \
  --url http://localhost:3000/api/invitation \
  --header 'content-type: application/json' \
  --data '{"email":"name@domain.com"}'

登録確認メールが届きました!

invitation_mail

REGISTERING USER

register_handler.rs を作成

PARSING URL PARAMETERS

main.rs を編集

TEST YOUR IMPLEMENTATION

  • Invitation request
curl --request POST \
  --url http://localhost:3000/api/invitation \
  --header 'content-type: application/json' \
  --data '{"email":"name@domain.com"}'

invited

  • Registration request
curl --request POST \
  --url http://localhost:3000/api/register/964e9cc1-78af-4ca6-9d63-86f578086b4e \
  --header 'content-type: application/json' \
  --data '{"password":"password"}'

registered

AUTH HANDLING

auth_handler.rs を作成、 main.rs を編集

TEST RUN AUTH

TESTING LOGGED IN USER

  • Login request
curl -i --request POST \
  --url http://localhost:3000/api/auth \
  --header 'content-type: application/json' \
  --data '{"email": "name@domain.com","password":"password"}'

logged_in

  • Get-me request
curl -i -n --request GET \
  --url http://localhost:3000/api/auth \
  --cookie auth=+dom99l8raCa6EG2poRFhdfdhCNGpmZoRm2M1U78hw9N5HvT5Zhlj9hw/1/DEKV71oi9Ib7NiA== \
; echo

get_me

  • Logout request
curl -i --request DELETE \
  --url http://localhost:3000/api/auth

logged_out

WHAT’S NEXT

とりあえず雪見だいふくを食べよう

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published