0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

NCMBとMonaca、Framework7を使ってチャットアプリを作る(その2:認証実行)

Last updated at Posted at 2022-08-03

NCMBとMonacaを使ってチャットアプリを作ります。以前、PieSocketを使ったチャットアプリを公開したのですが、現在○○は無料での利用枠がなくなっています。そこで今回はgoofmint/ruby-websockets-chat-demoをベースにチャットアプリを作ります。これはごく単純なWebScoketサーバーで、Herokuにデプロイできるものです。Herokuの無料枠内での利用が可能です。

前回の記事では画面の説明とSDKの導入までを進めましたので、今回は認証周りを解説します。

コードについて

今回のコードはNCMBMania/MonacaChatDemoにアップロードしてあります。実装時の参考にしてください。

最初に読み込む画面について

www/index.html にて最初に読み込む画面を指定します。今回は /chat/ としていますので、チャット画面が読み込まれます。

<div id="app">
	<!-- Views/Tabs container -->
	<div class="views tabs safe-areas">
		<!-- Your main view/tab, should have "view-main" class. It also has "tab-active" class -->
		<div id="view-home" class="view view-main view-init" data-url="/chat/">
		</div>
	</div>
</div>

routes.jsにて認証状態の判定

/chat/ へ移動する際に、認証状態をチェックします。もし認証されていないようであれば、/login/ へ遷移します。これは routes.js で、 beforeEnter 関数を使って処理するのがポイントになります。リダイレクト処理を行う場合には reject 関数を呼び出し、その上でルーターで画面遷移します。

// チャット画面
{
	path: '/chat/',
	componentUrl: './pages/chat.html',
	beforeEnter: ({ resolve, reject, router }) => {
		// ログインユーザー情報の取得
		const user = ncmb.User.getCurrentUser();
		if (!user) {
			// 認証していない場合(user === null)
			// エラー判定
			reject();
			// ログイン画面に遷移
			router.navigate('/login/');
		} else {
			// 認証している場合
			resolve();
		}
	}
},

ログイン画面について

ログイン画面ではユーザー名を設定してもらいます。そしてボタンを押すと login 関数が呼び出されます。

<div class="page" data-name="form">
	<div class="navbar">
		<div class="navbar-bg"></div>
		<div class="navbar-inner sliding">
			<div class="title">名前を決める</div>
		</div>
	</div>
	<div class="page-content">
		<div class="block-title">チャットの名前を決めてください</div>
		<form id="login">
			<div class="list no-hairlines-md">
				<ul>
					<li>
						<div class="item-content item-input">
							<div class="item-inner">
								<div class="item-title item-label">名前</div>
								<div class="item-input-wrap">
									<input type="text" name="displayName" placeholder="お名前" required/>
								</div>
							</div>
						</div>
					</li>
				</ul>
			</div>
			<div class="block block-strong">
				<p class="row">
					<a href="#" @click=${login} class="col button">入室する</a>
				</p>
			</div>
		</form>
	</div>
</div>

FireShot Capture 484 - Monaca × Framework7 × NCMB - localhost 20220803154332 - 484.jpg

ログイン処理について

login 関数では、まず匿名認証を実行します。その結果としてユーザーオブジェクトが返ってきますので、そこに表示名 displayName を設定して更新します。これだけで認証処理と、表示名の設定が完了します。

認証終了後は再度 /chat/ に遷移します。認証していればユーザーオブジェクトが存在するので、www/pages/chat.html が読み込まれます。

export default (props, { $f7router }) => {
	// ログイン処理を行う関数
	const login = async () => {
		// 入力値の取得
		const params = app.form.convertToData($('#login'));
		// 匿名認証の実行
		const user = await ncmb.User.loginAsAnonymous();
		// 入力された表示名を適用して更新
		await user
			.set('displayName', params.displayName)
			.update();
		// チャット画面にリダイレクト
		$f7router.navigate('/chat/');
	}
	return $render;
}

まとめ

今回はチャットアプリの認証周りについて解説しました。次はチャット画面周りを解説します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?