質問編集履歴

9

文言の修正

2020/04/07 13:09

投稿

sagme
sagme

スコア10

test CHANGED
File without changes
test CHANGED
@@ -60,7 +60,7 @@
60
60
 
61
61
 
62
62
 
63
- ④ 認証成功(戻るリンクは機能していない)
63
+ ④ 認証成功した後のcallback画面(戻るリンクは機能していない)
64
64
 
65
65
  ![イメージ説明](e49baea76e74dadba40085822cc94b1c.png)
66
66
 
@@ -524,7 +524,9 @@
524
524
 
525
525
  ### 試したこと
526
526
 
527
+ なぜ引数を渡してもresultが返ってこないのかを調べるため
528
+
527
- _loginFunc()の認証する部分の
529
+ _loginFunc()の認証する部分中で
528
530
 
529
531
  ```
530
532
 
@@ -546,7 +548,7 @@
546
548
 
547
549
  ```
548
550
 
549
- 中で何が行われているのか確認しようとしましたが、どうやって確認したら良いか分からない状態です。
551
+ 何が行われているのか確認しようとしましたが、どうやって確認したら良いか分からない状態です。
550
552
 
551
553
 
552
554
 
@@ -554,7 +556,7 @@
554
556
 
555
557
 
556
558
 
557
- 参照したサンプルコード [MaikuB/flutter_appauth](https://github.com/MaikuB/flutter_appauth) の中には、[flutter_appauth](https://pub.dev/packages/flutter_appauth) だけでなく
559
+ 参照したGitのサンプルコード [MaikuB/flutter_appauth](https://github.com/MaikuB/flutter_appauth) の中には、[flutter_appauth](https://pub.dev/packages/flutter_appauth) だけでなく
558
560
 
559
561
  [flutter_appauth_platform_interface](https://pub.dev/packages/flutter_appauth_platform_interface#-readme-tab-)の実装も含まれていましたが、この部分がどういう役割をしているのか、flutter_appauth の main.dart からどのように参照されて使われているのかが分かりません。
560
562
 

8

文言の修正

2020/04/07 13:09

投稿

sagme
sagme

スコア10

test CHANGED
File without changes
test CHANGED
@@ -1,11 +1,3 @@
1
- すみません、この質問の後半部分が無いですが、
2
-
3
- エラーメッセージとソースコードが消えてしまっているため、現在修正しています。
4
-
5
-
6
-
7
-
8
-
9
1
  ### 前提・実現したいこと
10
2
 
11
3
 

7

書式の改善

2020/04/07 13:05

投稿

sagme
sagme

スコア10

test CHANGED
File without changes
test CHANGED
@@ -566,6 +566,8 @@
566
566
 
567
567
  [flutter_appauth_platform_interface](https://pub.dev/packages/flutter_appauth_platform_interface#-readme-tab-)の実装も含まれていましたが、この部分がどういう役割をしているのか、flutter_appauth の main.dart からどのように参照されて使われているのかが分かりません。
568
568
 
569
+
570
+
569
571
  そのため、自分の書いた上記のコードにはflutter_appauth_platform_interfaceの実装が含まれていないので
570
572
 
571
573
  これが原因なのかなと思いますが、使い方が分からず困っています。

6

文言の修正

2020/04/07 13:05

投稿

sagme
sagme

スコア10

test CHANGED
File without changes
test CHANGED
@@ -32,7 +32,7 @@
32
32
 
33
33
 
34
34
 
35
- GitHubのコードを参照して実装しました。
35
+ こちらのGitHubのサンプルコードを参照して実装しました。
36
36
 
37
37
  [MaikuB/flutter_appauth](https://github.com/MaikuB/flutter_appauth)
38
38
 
@@ -532,9 +532,43 @@
532
532
 
533
533
  ### 試したこと
534
534
 
535
-
536
-
537
- ここに問題に対して試したことを記載してください。
535
+ _loginFunc()の認証する部分の
536
+
537
+ ```
538
+
539
+ final AuthorizationTokenResponse result =
540
+
541
+ await _appAuth.authorizeAndExchangeCode(
542
+
543
+ AuthorizationTokenRequest(
544
+
545
+ _clientId, // php-test
546
+
547
+ _redirectUrl,
548
+
549
+ serviceConfiguration: _serviceConfiguration,
550
+
551
+ scopes: _scopes),
552
+
553
+ );
554
+
555
+ ```
556
+
557
+ 中で何が行われているのか確認しようとしましたが、どうやって確認したら良いか分からない状態です。
558
+
559
+
560
+
561
+ 困っていることその②
562
+
563
+
564
+
565
+ 参照したサンプルコード [MaikuB/flutter_appauth](https://github.com/MaikuB/flutter_appauth) の中には、[flutter_appauth](https://pub.dev/packages/flutter_appauth) だけでなく
566
+
567
+ [flutter_appauth_platform_interface](https://pub.dev/packages/flutter_appauth_platform_interface#-readme-tab-)の実装も含まれていましたが、この部分がどういう役割をしているのか、flutter_appauth の main.dart からどのように参照されて使われているのかが分かりません。
568
+
569
+ そのため、自分の書いた上記のコードにはflutter_appauth_platform_interfaceの実装が含まれていないので
570
+
571
+ これが原因なのかなと思いますが、使い方が分からず困っています。
538
572
 
539
573
 
540
574
 
@@ -542,4 +576,12 @@
542
576
 
543
577
 
544
578
 
579
+ macOS Mojave
580
+
581
+ Flutter 1.12.13+hotfix.5
582
+
545
- ここにより詳細な情報を記載してください。
583
+ Tools • Dart 2.7.0
584
+
585
+
586
+
587
+ 説明が長くなってしまいましたが、どうぞよろしくお願いいたします。

5

文言の修正

2020/04/07 13:03

投稿

sagme
sagme

スコア10

test CHANGED
File without changes
test CHANGED
@@ -512,7 +512,17 @@
512
512
 
513
513
 
514
514
 
515
- ```dart
515
+ ```php
516
+
517
+ callback.php
518
+
519
+
520
+
521
+ // webアプリの名残でphpファイルに書いてあるが、php部分は無し。戻るリンクの中身は無い。
522
+
523
+ 認証成功<br>
524
+
525
+ <a href="">戻る</a>
516
526
 
517
527
 
518
528
 

4

文言の修正

2020/04/07 12:41

投稿

sagme
sagme

スコア10

test CHANGED
File without changes
test CHANGED
@@ -422,7 +422,91 @@
422
422
 
423
423
  ```dart
424
424
 
425
-
425
+ screen1.dart
426
+
427
+
428
+
429
+ import 'package:flutter/material.dart';
430
+
431
+ import 'package:http/http.dart' as http;
432
+
433
+ import 'package:flutter_appauth/flutter_appauth.dart';
434
+
435
+
436
+
437
+ //// widget ////
438
+
439
+ class Screen1 extends StatefulWidget {
440
+
441
+ String api;
442
+
443
+
444
+
445
+ Screen1({Key key, this.api}): super(key: key);
446
+
447
+
448
+
449
+ @override
450
+
451
+ _Screen1State createState() => _Screen1State(this.api);
452
+
453
+ }
454
+
455
+
456
+
457
+ class _Screen1State extends State<Screen1> {
458
+
459
+ String _api;
460
+
461
+
462
+
463
+ _Screen1State(String api){
464
+
465
+ this._api = api;
466
+
467
+ }
468
+
469
+
470
+
471
+ @override
472
+
473
+ void initState() {
474
+
475
+ super.initState();
476
+
477
+ }
478
+
479
+
480
+
481
+ @override
482
+
483
+ Widget build(BuildContext context) {
484
+
485
+
486
+
487
+ return Scaffold(
488
+
489
+ resizeToAvoidBottomInset: false,
490
+
491
+ appBar: AppBar(title: Text('screen1'),),
492
+
493
+ body: Column(
494
+
495
+ children: [
496
+
497
+ Text('screen1'),
498
+
499
+ Text('$_api'),
500
+
501
+ ]
502
+
503
+ )
504
+
505
+ );
506
+
507
+ }
508
+
509
+ }
426
510
 
427
511
  ```
428
512
 

3

文言の修正

2020/04/07 12:37

投稿

sagme
sagme

スコア10

test CHANGED
File without changes
test CHANGED
@@ -90,6 +90,10 @@
90
90
 
91
91
  ```
92
92
 
93
+ Launching lib/main.dart on Android SDK built for x86 64 in debug mode...
94
+
95
+ ✓ Built build/app/outputs/apk/debug/app-debug.apk.
96
+
93
97
  I/flutter ( 5095): 1
94
98
 
95
99
  I/flutter ( 5095): 2
@@ -104,14 +108,334 @@
104
108
 
105
109
 
106
110
 
107
- ```ここに言語名を入力
111
+ ```dart
112
+
108
-
113
+ main.dart
114
+
115
+
116
+
117
+ import 'package:flutter/material.dart';
118
+
119
+ import 'package:http/http.dart' as http;
120
+
121
+ import 'package:flutter_appauth/flutter_appauth.dart';
122
+
123
+ import 'package:flutter_auth_login_app/screen1.dart';
124
+
125
+
126
+
127
+ void main() => runApp(MyApp());
128
+
129
+
130
+
131
+ class MyApp extends StatelessWidget {
132
+
133
+ @override
134
+
135
+ Widget build(BuildContext context) {
136
+
137
+ return MaterialApp(
138
+
139
+ title: 'Flutter Demo',
140
+
141
+ theme: ThemeData(
142
+
143
+ primarySwatch: Colors.blue,
144
+
145
+ ),
146
+
147
+ home: MyHomePage(title: 'Flutter Demo Home Page'),
148
+
149
+ );
150
+
151
+ }
152
+
153
+ }
154
+
155
+
156
+
157
+ class MyHomePage extends StatefulWidget {
158
+
159
+ MyHomePage({Key key, this.title}) : super(key: key);
160
+
161
+ final String title;
162
+
163
+ @override
164
+
165
+ _MyHomePageState createState() => _MyHomePageState();
166
+
167
+ }
168
+
169
+
170
+
171
+ class _MyHomePageState extends State<MyHomePage> {
172
+
173
+ final String _clientId = 'test001';
174
+
175
+ final String _redirectUrl = 'http://10.0.2.2:10081/…/callback.php' ; // callbackのURL
176
+
177
+
178
+
179
+ final List<String> _scopes = <String>[
180
+
181
+ 'openid',
182
+
183
+ 'offline_access',
184
+
185
+ ];
186
+
187
+
188
+
189
+ // String _codeVerifier;
190
+
191
+ // String _authorizationCode;
192
+
193
+ String _accessToken;
194
+
195
+ String _refreshToken;
196
+
197
+ String _userInfo = '';
198
+
199
+
200
+
201
+ final FlutterAppAuth _appAuth = FlutterAppAuth();
202
+
203
+ // final TextEditingController _authorizationCodeTextController = TextEditingController();
204
+
205
+ final TextEditingController _idTokenTextController = TextEditingController();
206
+
207
+ final TextEditingController _accessTokenExpirationTextController = TextEditingController();
208
+
209
+ final TextEditingController _accessTokenTextController = TextEditingController();
210
+
211
+ final TextEditingController _refreshTokenTextController = TextEditingController();
212
+
213
+
214
+
215
+ final AuthorizationServiceConfiguration _serviceConfiguration =
216
+
217
+ AuthorizationServiceConfiguration(
218
+
219
+ 'http://10.0.2.2:18080/…/auth', // 認証エンドポイントのURL
220
+
221
+ 'http://10.0.2.2:18080/…/token' // トークンエンドポイントURL
222
+
223
+ );
224
+
225
+
226
+
227
+ @override
228
+
229
+ void initState() {
230
+
231
+ super.initState();
232
+
233
+ }
234
+
235
+
236
+
237
+ void _loginFunc() async {
238
+
239
+ // 認証とアクセス、ID、リフレッシュトークン取得を一度にやる場合
240
+
241
+ print('1');
242
+
109
- ソースコード
243
+ try {
244
+
245
+ print('2'); // ここまで流れて↓のresultに値が戻らないため、エラーになる
246
+
247
+ final AuthorizationTokenResponse result =
248
+
249
+ await _appAuth.authorizeAndExchangeCode(
250
+
251
+ AuthorizationTokenRequest(
252
+
253
+ _clientId,
254
+
255
+ _redirectUrl,
256
+
257
+ serviceConfiguration: _serviceConfiguration,
258
+
259
+ scopes: _scopes),
260
+
261
+ );
262
+
263
+
264
+
265
+ print('3');
266
+
267
+ // アクセス、ID、リフレッシュトークン格納
268
+
269
+ if (result != null) {
270
+
271
+ _accessToken = _accessTokenTextController.text = result.accessToken;
272
+
273
+ _idTokenTextController.text = result.idToken;
274
+
275
+ _refreshToken = _refreshTokenTextController.text = result.refreshToken;
276
+
277
+ _accessTokenExpirationTextController.text = result.accessTokenExpirationDateTime?.toIso8601String();
278
+
279
+ }
280
+
281
+
282
+
283
+ // API取得
284
+
285
+ print('4=$result');
286
+
287
+ if (result != null) {
288
+
289
+ print('4 in');
290
+
291
+ await _testApi(result);
292
+
293
+ }
294
+
295
+
296
+
297
+ // 画面遷移
298
+
299
+ print('5');
300
+
301
+ _gotoScreen1();
302
+
303
+
304
+
305
+ // エラー処理
306
+
307
+ } catch(e) {
308
+
309
+ print('e=$e'); //エラー時のメッセージ出力
310
+
311
+ }
312
+
313
+ }
314
+
315
+
316
+
317
+ // API取得
318
+
319
+ Future<void> _testApi(TokenResponse response) async {
320
+
321
+ final http.Response httpResponse = await http.get(
322
+
323
+ 'http://10.0.2.2:18082/…/data', // APIのエンドポイント
324
+
325
+ headers: <String, String>{'Authorization': 'Bearer $_accessToken'});
326
+
327
+ setState(() {
328
+
329
+ _userInfo = httpResponse.statusCode == 200 ? httpResponse.body : '';
330
+
331
+ });
332
+
333
+ }
334
+
335
+
336
+
337
+ // 画面遷移 screen1 API取得後に遷移する画面
338
+
339
+ void _gotoScreen1() {
340
+
341
+ Navigator.pushReplacement(
342
+
343
+ context,
344
+
345
+ new MaterialPageRoute<Null>(
346
+
347
+ settings: const RouteSettings(name: "/screen1"),
348
+
349
+ builder: (BuildContext context) => Screen1(api:_userInfo),
350
+
351
+ ),
352
+
353
+ );
354
+
355
+ }
356
+
357
+
358
+
359
+ // widget
360
+
361
+ @override
362
+
363
+ Widget build(BuildContext context) {
364
+
365
+
366
+
367
+ return Scaffold(
368
+
369
+ appBar: AppBar(title: Text(widget.title),),
370
+
371
+ body: Center(
372
+
373
+
374
+
375
+ child: Column(
376
+
377
+ mainAxisAlignment: MainAxisAlignment.center,
378
+
379
+ children: <Widget>[
380
+
381
+
382
+
383
+ Padding(
384
+
385
+ padding: EdgeInsets.only(bottom: 40),
386
+
387
+ child: Text('アプリ初期画面'),
388
+
389
+ ),
390
+
391
+
392
+
393
+ FlatButton(key:null, onPressed: _loginFunc,
394
+
395
+ shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(3.0)),
396
+
397
+ color: Color(0xFF4c6cb3), // 群青色
398
+
399
+ child: Text('ログインページへ',),
400
+
401
+ )
402
+
403
+ ],
404
+
405
+ ),
406
+
407
+ ),
408
+
409
+ );
410
+
411
+ }
412
+
413
+ }
414
+
415
+
416
+
417
+
110
418
 
111
419
  ```
112
420
 
113
421
 
114
422
 
423
+ ```dart
424
+
425
+
426
+
427
+ ```
428
+
429
+
430
+
431
+ ```dart
432
+
433
+
434
+
435
+ ```
436
+
437
+
438
+
115
439
  ### 試したこと
116
440
 
117
441
 

2

文言の修正

2020/04/07 12:35

投稿

sagme
sagme

スコア10

test CHANGED
File without changes
test CHANGED
@@ -68,17 +68,33 @@
68
68
 
69
69
 
70
70
 
71
+ ④ 認証成功(戻るリンクは機能していない)
72
+
73
+ ![イメージ説明](e49baea76e74dadba40085822cc94b1c.png)
71
74
 
72
75
 
73
76
 
77
+ ⑤ ↑の画面の×印をタップして画面を閉じてアプリに戻った所
78
+
79
+ ![イメージ説明](697e3ce4f8e1a09302664bb55cedf9cc.png)
74
80
 
75
81
 
82
+
83
+ ⑥エラーメッセージ(④の画面を手動で閉じたので、ソースコード中のresultに何も入らずエラーになった
84
+
85
+  エラー後もアプリは動いているが、その後の画面遷移はしていない
86
+
87
+ ![イメージ説明](909e6d8b30fd3c3d4ededd7947d52f6b.png)
76
88
 
77
89
 
78
90
 
79
91
  ```
80
92
 
81
- エラーメッセージ
93
+ I/flutter ( 5095): 1
94
+
95
+ I/flutter ( 5095): 2
96
+
97
+ I/flutter ( 5095): e=PlatformException(authorize_and_exchange_code_failed, Failed to authorize: [error: null, description: User cancelled flow], null)
82
98
 
83
99
  ```
84
100
 

1

文言の修正

2020/04/07 12:14

投稿

sagme
sagme

スコア10

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,11 @@
1
+ すみません、この質問の後半部分が無いですが、
2
+
3
+ エラーメッセージとソースコードが消えてしまっているため、現在修正しています。
4
+
5
+
6
+
7
+
8
+
1
9
  ### 前提・実現したいこと
2
10
 
3
11
 
@@ -64,6 +72,10 @@
64
72
 
65
73
 
66
74
 
75
+
76
+
77
+
78
+
67
79
  ```
68
80
 
69
81
  エラーメッセージ