Python登录多解决方案

时间:2021-04-19 19:48:27

标签: python mysql flask sqlalchemy flask-login

阅读了很多文章后,我来到这里问一个有关不同类型用户(两个usermixin classes)的flask登录的问题。

我有两种类型的用户(如前面提到的两个用户类别)- 1.让我们称他们为普通用户(电子邮件和密码) 2.社交网络用户(Facebook、Twitter、Google)和成功之后 OAuth使用 FacebookTwitterGoogle API 登录我需要禁用对个人资料页面的访问(普通用户可以访问),当然要保持登录状态并稍后将其注销。

事情就是这样,我用 https://pypi.org/project/Flask-Login-Multi/ 试过了。很简单,我为 auth.py 制作了 2 个蓝图,其中我为两种类型的用户定义了登录,但它不起作用(当我输入 @login_required 时它崩溃了)

我可以在这里提供我的代码,但如果可能的话,我只想有人帮助我?提前致谢,问候。

2 个答案:

答案 0 :(得分:1)

身份验证和授权之间存在差异。身份验证决定允许谁进入,授权决定您的用户可以看到什么。
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/HeaderRowID" android:layout_width="0dp" android:layout_height="wrap_content" android:gravity="center" android:text="ID" android:textSize="30sp" android:textStyle="bold" app:layout_constraintEnd_toStartOf="@+id/HeaderRowName" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintWidth_percent="0.3"/> <TextView android:id="@+id/HeaderRowName" android:layout_width="0dp" android:layout_height="wrap_content" android:gravity="center" android:text="Name" android:textSize="16dp" android:textStyle="bold" app:layout_constraintStart_toEndOf="@+id/HeaderRowID" app:layout_constraintEnd_toStartOf="@+id/HeaderRowPayment" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="@+id/HeaderRowID" app:layout_constraintWidth_percent="0.4"/> <TextView android:id="@+id/HeaderRowPayment" android:layout_width="0dp" android:layout_height="wrap_content" android:gravity="center" android:text="Payment" android:textSize="16dp" android:textStyle="bold" app:layout_constraintStart_toEndOf="@+id/HeaderRowName" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="@+id/HeaderRowID" app:layout_constraintWidth_percent="0.3"/> </androidx.constraintlayout.widget.ConstraintLayout> 将处理身份验证,但您提出的问题涉及授权。这意味着您还需要使用 <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/recycler_item_regular_cell_ID" android:layout_width="0dp" android:layout_height="wrap_content" android:gravity="center" android:textSize="16dp" app:layout_constraintEnd_toStartOf="@+id/cell_name" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintWidth_percent="0.3" tools:text="ID" /> <TextView android:id="@+id/cell_name" android:layout_width="0dp" android:layout_height="wrap_content" android:gravity="center" android:textSize="16dp" app:layout_constraintStart_toEndOf="@+id/recycler_item_regular_cell_ID" app:layout_constraintEnd_toStartOf="@+id/cell_payment" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="@+id/recycler_item_regular_cell_ID" app:layout_constraintWidth_percent="0.4" tools:text="Name" /> <TextView android:id="@+id/cell_payment" android:layout_width="0dp" android:layout_height="wrap_content" android:gravity="center" android:textSize="16dp" app:layout_constraintBottom_toBottomOf="@+id/recycler_item_regular_cell_ID" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/cell_name" app:layout_constraintTop_toTopOf="parent" app:layout_constraintWidth_percent="0.3" tools:text="Payment" /> </androidx.constraintlayout.widget.ConstraintLayout> 。根据您的预期行为创建多个角色,然后根据需要为这些用户分配适当的角色。使用 @login_required 然后将处理授权,仅允许授权用户根据其角色访问该路由。

答案 1 :(得分:0)

Flask principal 与角色完成了这项工作,还有一件更重要的事情要说的是,我需要在会话中定义登录类型,以便为两种类型的用户(常规和社交网络)。