阅读了很多文章后,我来到这里问一个有关不同类型用户(两个usermixin classes
)的flask登录的问题。
我有两种类型的用户(如前面提到的两个用户类别)- 1.让我们称他们为普通用户(电子邮件和密码) 2.社交网络用户(Facebook、Twitter、Google)和成功之后 OAuth
使用 Facebook
、Twitter
和 Google API
登录我需要禁用对个人资料页面的访问(普通用户可以访问),当然要保持登录状态并稍后将其注销。
事情就是这样,我用 https://pypi.org/project/Flask-Login-Multi/ 试过了。很简单,我为 auth.py 制作了 2 个蓝图,其中我为两种类型的用户定义了登录,但它不起作用(当我输入 @login_required
时它崩溃了)
我可以在这里提供我的代码,但如果可能的话,我只想有人帮助我?提前致谢,问候。
答案 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
与角色完成了这项工作,还有一件更重要的事情要说的是,我需要在会话中定义登录类型,以便为两种类型的用户(常规和社交网络)。